C# 通过使用LINQ筛选两个列表来创建字典
我需要一种方法来创建一个C# 通过使用LINQ筛选两个列表来创建字典,c#,linq,C#,Linq,我需要一种方法来创建一个字典,方法是使用linq语句从两个列表中筛选数据。例如: list1: { 1, 2, 3 } list2: { <apple, 1>, <peach, 3> } list1:{1,2,3} 清单2:{,} 最终的字典应该是这样的:{,} 应跳过列表1中的2 请了解如何使用linq?加入列表并将结果放入字典来解决此问题 var d = list1.Join(list2, i=>i, o=>o.Id, (i,o)=>o)
字典
,方法是使用linq语句从两个列表中筛选数据。例如:
list1: { 1, 2, 3 }
list2: { <apple, 1>, <peach, 3> }
list1:{1,2,3}
清单2:{,}
最终的字典应该是这样的:{,}
应跳过列表1中的2
请了解如何使用linq?
加入列表并将结果放入字典来解决此问题
var d = list1.Join(list2, i=>i, o=>o.Id, (i,o)=>o)
.ToDictionary(o=>o.Id);
尝试使用一个加入列表,并将结果放入字典
var d = list1.Join(list2, i=>i, o=>o.Id, (i,o)=>o)
.ToDictionary(o=>o.Id);
如果您可以使用将两个列表合并为一个列表,然后生成字典,请尝试
比如:
var result = list1.Zip(list2, (l, r) => Tuple.Create(l, r))
.ToDictionary(v => v.Item1, v => v.Item2);
可以使用将两个列表合并为一个列表,然后生成字典
比如:
var result = list1.Zip(list2, (l, r) => Tuple.Create(l, r))
.ToDictionary(v => v.Item1, v => v.Item2);
如果需要,您可以使用SelectMany
:
var result = (from l1 in list1
from l2 in list2
where l1 == l2.Id
select new
{
Id = l1,
Name = l2.Name
}).ToDictionary(k=>k.Id, v=>v.Name);
如果需要,您可以使用SelectMany
:
var result = (from l1 in list1
from l2 in list2
where l1 == l2.Id
select new
{
Id = l1,
Name = l2.Name
}).ToDictionary(k=>k.Id, v=>v.Name);
没有LINQ你怎么办?这可能会帮助您获得基于Linq的解决方案。只需自己尝试一下。list2看起来已经像一本字典:apple,key->1>,我认为您应该为您的模型提供更多信息,可能它们更复杂…@Soren其对象具有我应该使用的2个属性(apple,1),而不是没有LINQ您将如何操作?这可能会帮助您获得基于Linq的解决方案。我想你应该为你的模型提供更多的信息,也许它们更复杂…@Soren它的对象有两个我应该使用的属性(苹果,1)如果列表1和列表的长度与所讨论的不一样,会发生什么情况?过滤器在哪里?@qxg它将在第一个列表的末尾停止创建一个ZipLong
,当较短的列表用完时,它会放入一个默认元素。@devhedgehog问题不是很清楚,无法确定放在哪里。可以在Zip
之前的输入列表上或在Zip
的输出上执行。如果列表1和列表的长度与问题中的长度不同,会发生什么情况?这里的过滤器在哪里?@qxg它将在第一个列表的末尾停止创建ZipLong
,当较短的列表被删除时,它会放入一个默认元素“精疲力竭”。@devhedgehog的问题不是很清楚,无法确定该放在哪里。可以在Zip
之前的输入列表上或在Zip
@HimBromBeere的输出上执行这是一个用于SelectMany
@HimBromBeere的linq查询语法这是一个用于SelectMany