通过lambda查找列表是否包含另一个列表值

时间:2013-01-14 09:55:39

标签: c# list lambda

我怎么能用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());
    }

6 个答案:

答案 0 :(得分: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(正如你所问的那样)。

答案 1 :(得分: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

答案 2 :(得分:0)

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

确定所有元素是否相同(无论列表中的顺序如何)

你应该使用

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

而不是

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

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

listsHaveSameValue = list1.OrderBy(x=>x).SequenceEqual(list2.OrderBy(x=>x)

答案 3 :(得分:0)

你应该使用Intersect

var list3 = list2.Intersect(list1);

list3包含两个列表

中出现的元素

答案 4 :(得分:0)

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

list1.Any(i => list2.Contains(i));

答案 5 :(得分:0)

list1.Intersect(list2).Any()

应该返回true或false。