gpt4 book ai didi

c# - 如何在 LINQ 中以更简洁的方式编写此示例?

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

来自这个列表

List<Foo> list = new List<Foo>()
{
new Foo("Albert", 49, 8),
new Foo("Barbara", 153, 45),
new Foo("Albert", -23, 55)
};

我想得到一个字典,其中的名字作为键,列表中的第一个 Foo 对象作为值。

有没有一种方法可以使用 LINQ 以比我在这里所做的更简洁的方式编写逻辑?

Dictionary<string, Foo> fooByName = new Dictionary<string, Foo>();

foreach (var a in assignmentIndetifiers)
{
if (!names.ContainsKey(a.ValueText))
{
names.Add(a.ValueText, a);
}
}

最佳答案

你可以尝试这样的事情:

var dictionary = list.GroupBy(f=>f.Name)
.Select(gr=>new { Name = gr.Key, Foo = gr.First() })
.ToDictionary(x=>x.Name, x=>x.Foo);

我已经假设Foo 有一个名为Name 的属性,这是您想要用作字典键的属性。如果不是这样,您应该相应地更改它。

本质上,我们根据 Namelist 中找到的项目进行分组,然后将结果投影到两个属性的匿名类型 NameFoo,它们显然与您想要的字典的键/值相关联,然后我们调用 ToDictionary 方法。

更新

正如 Igor 正确指出的那样,您可以使用 Select 传递整个投影并立即调用 ToDictionary

var dictionary = list.GroupBy(f=>f.Name)
.ToDictionary(gr=>gr.Key, gr=>gr.First());

关于c# - 如何在 LINQ 中以更简洁的方式编写此示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766896/

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