对LINQ中的重复值进行分组
本文关键字:LINQ | 更新日期: 2023-09-27 18:25:28
我有一个格式的简单对象
class MyObject {
public string foo;
public string bar;
}
我有一个这些对象的列表,其中"foo"的值是唯一的,而"bar"的值不是。例如-假设值如下
- Foo1、Bar1
- Foo2、Bar2
- Foo3、Bar1
- Foo4、Bar3
我希望将这些项分组,使它们如下:一个具有唯一"bar"键的Dictionary<string,List<string>
,以及一个具有关联"foo"值的List<string>
。
- 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的正确方法是什么?
听起来你真的只是想通过ToLookup
方法得到一个Lookup
:
var lookup = myObjectList.ToLookup(x => x.bar, x => x.foo);
如果您真的需要Dictionary
,您可以使用以下内容:
var dictionary = myObjectList.GroupBy(x => x.bar, x => x.foo)
.ToDictionary(g => g.Key, g => g.ToList());
但如果可以的话,我会使用查找。