我怎么能用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());
}
答案 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));
确定list1
和list2
是否具有相同元素的Linq方法之一是使用SequenceEqual
listsHaveSameValue = list1.OrderBy(x=>x).SequenceEqual(list2.OrderBy(x=>x)
答案 3 :(得分:0)
答案 4 :(得分:0)
这将检查是否存在至少一个共同元素。
list1.Any(i => list2.Contains(i));
答案 5 :(得分:0)
list1.Intersect(list2).Any()
应该返回true或false。