我有一个格式为
的简单对象class MyObject {
public string foo;
public string bar;
}
我有这些对象的列表,其中“foo”的值是唯一的,而“bar”的值不是。例如 - 假设值如下
- Foo1, Bar1
- Foo2, Bar2
- Foo3, Bar1
- Foo4, Bar3
我希望对项目进行分组,如下所示,Dictionary<string,List<string>
带有独特的“bar”键,和一个List<string>
它们相关的“foo”值。
- Bar1, [Foo1,Foo3]
- Bar2, [Foo2]
- Bar3, [Foo4]
我可以使用一个相当简单的循环来做到这一点 -
Dictionary<string,List<string>> result = new Dictionary<string,List<string>>();
myObjectList = new List<MyObject>();
foreach (MyObject obj in myObjectList)
{
if (result.ContainsKey(obj.bar))
{
result[obj.bar].Add(obj.foo);
}
else
{
result.Add(obj.bar,new List<string> {obj.foo});
}
}
但我正在尝试学习如何正确使用 LINQ,而且似乎有一个使用它的优雅解决方案。使用 LINQ 执行此操作的正确方法是什么?
最佳答案
听起来你真的只是想要一个 Lookup
通过 ToLookup
方法:
var lookup = myObjectList.ToLookup(x => x.bar, x => x.foo);
如果你真的需要一个字典
,你可以使用像这样的东西:
var dictionary = myObjectList.GroupBy(x => x.bar, x => x.foo)
.ToDictionary(g => g.Key, g => g.ToList());
...但如果可以的话,我会使用查找。
关于c# - 在 LINQ 中对重复值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411362/