热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

String.Except的快捷方式,如List.Except

如何解决《String.Except的快捷方式,如List.Except》经验,为你挑选了1个好方法。

与新的.NET 6,7等一样,我们有一个列表的Except类.

List A = new List();
List B = new List();
List C = A.Except(B).ToList();

我的问题是,如何最好地进行同一类的字符串版本:

string A = "

One

Two

"; string B = "

One

Two

Three

"; string C = A.Except(B).ToString();

获得结果=

Three

相反,我得到:

System.Linq.Enumerable+d__73`1[System.Char]

我究竟做错了什么?

编辑:

只需使用最大字符串最小字符串,反转数组顺序:

string C = B.Except(A);

和使用:尼克 new string(C.ToArray());给了我:

hr

使用反向后略有预期的结果.



1> Ciprian Vilc..:

您的解决方案有两个问题.

ToString()的行为

在IEnumerable上执行.ToString()时,它将始终打印出类型.这是因为IEnumerable不会覆盖ToString()的行为.有关详细信息,请参阅ToString.
如果您想将IEnumerable (返回类型为Except)转换为字符串,则必须执行此操作

var C = new string(A.Except(B));


A.Except的行为(B)

Except方法不像你想象的那样工作.

以下面的代码为例:

var a = new List { 1, 2, 3 };
var b = new List { 2, 3, 4 };
var c = a.Except(b);

结果将是{1}.该方法有效地做了什么是返回a中存在但不存在于b中的所有int的新枚举.

现在,字符串只是字符的枚举 - 更准确地说,是你的字符

var A = "

One

Two

";

从LINQ的角度来看,相当于

var A = new List { '<', 'd', 'i', 'v', '>', ..., '<', '/', 'd', 'i', 'v', '>' };

对于B.也是

如此.当你做A.除了(B),LINQ实际上会做的是遍历每个字符并查看它是否可以在B中找到它.如果确实如此,它不会在结果中结束组.现在,由于A中的所有字符也存在于B中,因此您将获得一个空字符串.要查看实际情况,请稍微修改A,使其包含不在B中的字符:

string A = "

One

Two

ApplePie";

如果你现在这样做

string A = "

One

Two

ApplePie"; string B = "

One

Two

Three

"; string C = new string(A.Except(B).ToArray());

你得到的是"AlP".

在我看来,做你的最好的方法是解析你的字符串,将它们转换为对象,然后做除外.没有内置算法能够告诉您的字符串是否实际构成以及如何区分它们.作为一个有效的解决方案,使用HtmlAgilityPack(一个nuget包)

var docB = new HtmlDocument();
docB.LoadHtml(B);

var docA = new HtmlDocument();
docA.LoadHtml(A);
var nodes = docB.DocumentNode.FirstChild.Descendants("p").Select(node => node.InnerHtml)
    .Except(docA.DocumentNode.FirstChild.ChildNodes.Select(node => node.InnerHtml));
// take note that we are actually doing whatIsInB.Except(whatIsInA), since doing the reverse would result in nothing. There is no 

in A that is not also present in B var result = string.Join(Environment.NewLine, nodes); // will resut in "Three" var otherResult = $"

{result}

"; // "

Three

"

我会让你做一个更通用的方法:)
但是这个想法是,如果你想要除了按照你期望的方式工作,你将不得不要求它使用字符串,而不是字符.

无论是否使用HtmlAgilityPack或Regex提取字符串组件所需的解析(本例中的

元素),如其他解决方案中所建议的,完全取决于您.


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
台湾金门高粱酒业集团股份公司
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有