检查两个IEnumerables之间的差异

6
所以基本上我有以下两个 IEnumerable列表
List A = {"Personal", "Tech", "Social"}
List B = {"Personal", "Tech", "General"}

现在我想要实现的是,获取List AList B之间的差异,即在这种情况下为SocialGeneral
我还需要确定,在List ASocial是多余的,而GeneralList B中多余的,以便相应地进行插入和删除。
我也可能会有另一种情况。
 List A = {"Personal", "Tech"}
 List B = {"Personal", "Tech", "General"}

在这种情况下,它将返回"General"。如何使用LINQ实现此功能?

列表是否可以期望被排序?索引是否重要,例如这些不同的 {"foo","bar"}{"bar","foo"} - Rune FS
不,如果是这种情况,它们是相同的。列表中的位置并不重要。 - JMon
5个回答

4

给您

var ListA = new List<string> {"Personal", "Tech", "Social"};
var ListB = new List<string> { "Personal", "Tech", "General" };

var insert = ListA.Except(ListB).ToList();
var delete = ListB.Except(ListA).ToList();

我尝试了你的解决方案,但是列表完全相同,它返回3个结果,即3个条目。 - JMon
实际上,我尝试了这里上面提到的简单示例,并且它能正常工作。因此,我的列表可能有些问题,我会让它们更加简单。谢谢! - JMon
谢谢alexb,但我已经找到我的问题啦! :) 感谢你的帮助,现在运行得完美了。 - JMon

2
你可以使用List<T>.Except()方法。

该方法可生成两个序列之间的差异集。

        public static void Main(string[] args)
        {
            List<string> A = new List<string> { "Personal", "Tech", "Social" };
            List<string> B = new List<string> { "Personal", "Tech", "General" };

            var result = A.Except(B);

            //Will print "Social"
            foreach (var i in result)
            {
                Console.WriteLine(i);
            }
        }

这里有一个演示

对于你的第二个情况;
        public static void Main(string[] args)
        {
            List<string> A = new List<string> { "Personal", "Tech" };
            List<string> B = new List<string> { "Personal", "Tech", "General"};

            var result = B.Except(A);

            foreach ( var i in result )
            {
                Console.WriteLine(i);
            }
        }

这里有一个演示

1

listA.Except(listB)会给你在列表A中但不在列表B中的所有项。 然后反过来做。


1

0
var q = A.Intersect(B);//"Personal" , "Tech"
var r = B.Except(A);//"General"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接