【发布时间】:2021-08-08 19:20:13
【问题描述】:
假设我们有一个变量“数据”,它是 ID 和子 ID 的列表:
var data = new List<Data>
{
new()
{
Id = 1,
ChildIds = new List<int> {123, 234, 345}
},
new()
{
Id = 1,
ChildIds = new List<int> {123, 234, 345}
},
new()
{
Id = 2,
ChildIds = new List<int> {678, 789}
},
};
我想要一本带有 ChildId 和相关 Id 的字典。如果 ChildId 已经在字典中,它应该用新的 Id 覆盖。
目前我有这个代码:
var dict = new Dictionary<int, int>();
foreach (var dataItem in data)
{
foreach (var child in dataItem.ChildIds)
{
dict[child] = dataItem.Id;
}
}
这很好用,但我不喜欢我使用两个循环的事实。我更喜欢使用 Linq ToDictionary 以函数式方式构建字典。 使用 Linq 构建字典的最佳方法是什么?
为什么?我更喜欢功能代码而不是改变状态。除此之外,我只是好奇如何使用 Linq 建立字典 ;-)
【问题讨论】:
-
您在寻找
SelectMany吗? stackoverflow.com/questions/1590723/flatten-list-in-linq -
This works fine, but I don't like the fact that I am using two loops. I prefer to use Linq ToDictionary to build up the dictionary in a Functional way为什么,你的方法有什么问题?你将如何使用这些数据?您是否尝试过 Linq,如果没有,请尝试一下,如果您有任何具体问题,请告诉我们。如果有,请发布相关的 Linq,我们可以提供进一步的帮助。 -
你的方法很好,LINQ 唯一能做的就是抽象出你已经在做的事情。除了额外的错误更正之外,我认为您的实施没有任何问题。
-
这段代码有效,但我更喜欢函数式代码而不是改变状态。除此之外,我只是好奇如何使用 Linq 建立字典 ;-)
-
@zaggler 完全一样,不过我喜欢 Linq 的简洁性和可读性。
标签: c# .net linq dictionary .net-core