C# 通过两个并发字典循环的Lambda表达式
我试图循环使用两个并发字典,如下面的代码,但是我想使用lambda表达式C# 通过两个并发字典循环的Lambda表达式,c#,loops,dictionary,concurrency,lambda,C#,Loops,Dictionary,Concurrency,Lambda,我试图循环使用两个并发字典,如下面的代码,但是我想使用lambda表达式 foreach (var s in sb_eventdata) { foreach (var f in final_data) { if (s.Value.Car.Equals(f.Value.Car)) { Console.Writeline("Found!"); } } } var values=sb\u eventd
foreach (var s in sb_eventdata)
{
foreach (var f in final_data)
{
if (s.Value.Car.Equals(f.Value.Car))
{
Console.Writeline("Found!");
}
}
}
var values=sb\u eventdata.Where(k=>k.Value.Hometeam.Contains(??);
我真的不确定传递到contains中的是什么,我假设另一个lambda表达式,但是什么?我认为您的朋友是Join()方法 在“LinqPad风格”中:
如果您只想知道两个字典是否共享至少一个值,可以使用以下任意值:
if(sb_eventdata.Any(s =>
final_data.Any(f => s.Value.Car.Equals(f.Value.Car))))
Console.WriteLine("Found!");
或包含:
if(sb_eventdata.Any(s => final_data.ContainsValue(s.Value)))
Console.WriteLine("Found!");
如果要计算最终数据中有多少sb_事件数据:
sb_eventdata.Where(s => final_data.ContainsValue(s.Value)).Count();
您可以使用来查找列表中的相似项。
然后显示所有相似的项目
var foo = sb_eventdata.Select(o => o.Value.Car).Intersect(final_data.Select(o => o.Value.Car));
foreach (var item in foo)
{
Console.Writeline("Found!");
}
与循环最接近的linq表达式是:
var sb_eventdata = new Dictionary<string, string>{ {"a", "a"}, {"b", "b"}};
var final_data = new Dictionary<string, string>{{"a", "a"}, {"b", "b"}, {"c","c"}};
var result =
// first loop
sb_eventdata.Select(s =>
// second loop
final_data.Where(f => s.Value.Equals(f.Value)))
// flatten results (returns results from the first dictionary)
.SelectMany(x => x);
var sb_eventdata=新字典{{“a”,“a”},{“b”,“b”};
var final_data=新字典{{“a”,“a”},{“b”,“b”},{“c”,“c”};
var结果=
//第一圈
sb_事件数据。选择(s=>
//第二圈
最终_数据,其中(f=>s.Value等于(f.Value)))
//展平结果(从第一个字典返回结果)
.SelectMany(x=>x);
您的示例代码回答的问题是“列表A中的任何内容是否与列表B中的记录匹配?”(如果是,请写“找到”)。这与var values=
所暗示的“给我列表A中与列表B中的记录匹配的记录”不同。要简化/澄清我的注释:是否要生成公共对象的列表(并将它们分配给值集合),或者如果存在匹配项(如Console.Writeline
),是否要执行某些操作?如果要生成列表,请使用Intersect
,要检测是否有结果,请使用Any
。最后,如果要创建副作用(如在每个匹配项上打印“Found”)使用ForEach
(假设它们是List
s)。只要集合类型实现了IEquatable
,就可以了。因为示例代码使用了Equals
,我认为您的假设是可靠的。如果类型不可等额,您应该使用@AnonymousTroll建议的加入。谢谢!这返回了最终的_数据对象,我可以进一步处理它.
var sb_eventdata = new Dictionary<string, string>{ {"a", "a"}, {"b", "b"}};
var final_data = new Dictionary<string, string>{{"a", "a"}, {"b", "b"}, {"c","c"}};
var result =
// first loop
sb_eventdata.Select(s =>
// second loop
final_data.Where(f => s.Value.Equals(f.Value)))
// flatten results (returns results from the first dictionary)
.SelectMany(x => x);