gpt4 book ai didi

c# - Linq 表达式。帮助最小化代码

转载 作者:行者123 更新时间:2023-11-30 13:52:07 24 4
gpt4 key购买 nike

请帮助最小化以下代码:有一个具有字典属性的类:

class Foo
{
public int Field { get; set; }
public Dictionary<int, bool> dic { get; set; }
}

还有一个 Foo 实例列表。我想从所有类实例中获取联合字典:

...

var items = new List<Foo>
{
new Foo {Field = 1, Dic = new Dictionary<int, bool> {{1, true}, {2, false}}},
new Foo {Field = 2, Dic = new Dictionary<int, bool> {{3, true}, {2, false}}}
};
var result = new Dictionary<int, bool>();

foreach (var dics in items.Select(x => x.Dic))
foreach (var pair in dics)
if (!result.ContainsKey(pair.Key))
result.Add(pair.Key, pair.Value);

// testing output
foreach (var pair in result)
Console.WriteLine("{0}, {1}", pair.Key, pair.Value);

是否可以使用纯 LINQ 方法来做到这一点?先感谢您!

最佳答案

您可以使用 SelectMany 来抓取和展平内部字典元素:

var result = items.SelectMany(f => f.Dic)
.GroupBy(pair => pair.Key)
.ToDictionary(g => g.Key, g => g.First().Value);

编辑:如果您感到勇敢,可以通过拾起 DistinctBy 进一步改善这一点。 Jon Skeet 的方法 morelinq项目。从本质上讲,GroupBy 这一步实际上有点矫枉过正,因为我们真正想要的只是每个键的第一个值。如果我们只选择具有不同键的对,我们可以避免分组和随后的 First 调用,如下所示:

var result = items.SelectMany(f => f.Dic)
.DistinctBy(pair => pair.Key)
.ToDictionary(pair => pair.Key, pair => pair.Value);

关于c# - Linq 表达式。帮助最小化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3149008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com