4

我怎样才能通过 lambda 做到这一点?找出两个列表是否具有相同的值。

    void Main()
    {
        var list1 = new List<string>{
            "a", "b", "c"
        };

        var list2 = new List<string>{
            "c", "d", "e"
        };

        bool listsHaveSameValue = false;
        foreach(var list1Value in list1){
              listsHaveSameValue = list2.Any(c => c.Equals(list1Value));
              if(listsHaveSameValue){
                   break;
              }
        }

        Debug.WriteLine(listsHaveSameValue.ToString());
    }
4

6 回答 6

4

你应该调查一下Intersect

var list1 = new List<string>{ "a", "b", "c"};
var list2 = new List<string>{ "c", "d", "e"};

var doubles = list1.Intersect(list2);
bool listsHaveSameValue = doubles.Any();

实际上并没有真正需要使用 lambda(如您所问)。

于 2013-01-14T09:56:49.793 回答
0

尝试使用Enumerable.Intersect方法

通过使用默认相等比较器比较值来生成两个序列的集合交集。

public static void Main(string[] args)
        {
            var list1 = new List<string>{
            "a", "b", "c"
        };

            var list2 = new List<string>{
            "c", "d", "e"
        };

           IEnumerable<string> dubvalues = list2.Intersect(list1);

            foreach (var i in dubvalues)
            {
                Console.WriteLine(i); // Output is c
            }
        }

这是一个DEMO.

于 2013-01-14T09:57:50.310 回答
0

您正在有效地搜索最后一个值。

确定所有元素是否相同(与列表中的顺序无关)

你应该使用

 listsHaveSameValue = listsHaveSameValue && list2.Any(c => c.Equals(list1Value));

代替

 listsHaveSameValue = list2.Any(c => c.Equals(list1Value));

确定是否具有相同元素的 Linq 方法之一list1list2使用SequenceEqual

listsHaveSameValue = list1.OrderBy(x=>x).SequenceEqual(list2.OrderBy(x=>x)
于 2013-01-14T09:58:09.507 回答
0

你应该使用相交

var list3 = list2.Intersect(list1);

list3 包含两个列表中出现的元素

于 2013-01-14T09:58:40.053 回答
0

这将检查是否存在至少一个公共元素。

list1.Any(i => list2.Contains(i));
于 2013-01-14T09:58:46.427 回答
0
list1.Intersect(list2).Any()

应该返回真或假。

于 2013-01-14T09:59:05.823 回答