当前位置: 首页 > 编程语言 > C#

FindAllIntersectedData,NotJustUniqueValues分享

时间:2023-04-10 21:45:46 C#

FindAllIntersectedData,NotJustUniqueValues我以为我理解了Intersect,结果我错了。列表list1=newList(){1,2,3,2,3};列表list2=newList(){2,3,4,3,4};list1.Intersect(list2)=>2,3//但是我想要的是://=>2,3,2,3,2,3,3我可以这样想象:varintersected=list1.Intersect(list2);varlist3=new列表();list3.AddRange(list1.Where(I=>intersected.Contains(I)));list3.AddRange(list2.Where(I=>intersected.Contains(I)));在LINQ中有更简单的方法来实现这一点吗?我需要澄清一下,我不关心结果的顺序。2,2,2,3,3,3,3也可以。问题是我在一个非常大的集合上使用它,所以我需要效率。我们谈论的是对象,而不是整体。这只是一个简单的例子,但我意识到这会有所作为。让我们看看我们是否可以准确描述您想要的内容。如果我错了,请纠正我。你想要:列表1的所有元素按顺序也出现在列表2中,然后列表2的所有元素按顺序也出现在列表1中。是吗?看起来很简单。返回list1.Where(x=>list2.Contains(x)).Concat(list2.Where(y=>list1.Contains(y))).ToList();请注意,这不适用于大型列表。如果每个列表都有一千个项目,这将进行几百万次比较。如果您处于这种情况,那么您想使用更有效的数据结构来测试成员资格:list1set=newHashSet(list1);list2set=newHashSet(list2);返回list1.Where(x=>list2set.Contains(x)).Concat(list2.Where(y=>list1set.Contains(y))).ToList();它只进行几千次比较,但可能会占用更多内存。varset=newHashSet(list1.Intersect(list2));返回list1.Concat(list2).Where(i=>set.Contains(i));我不相信使用内置API是不可能的。但是您可以使用以下内容来获得您要查找的结果。以上就是C#学习教程:求出所有相交的数据,而不仅仅是唯一值共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—IEnumerableIntersect2(thisIEnumerableleft,IEnumerableright){varmap=left.ToDictionary(x=>x,y=>错误);foreach(variteminright){if(map.ContainsKey(item)){map[item]=true;}}foreach(varcurinleft.Concat(right)){if(map.ContainsKey(cur)){yieldreturncur;}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢