假设我有一个List<NameValuePair>,其中NameValuePair是一个简单的对象,它具有Name属性和Value属性,两个字符串.
列表中填充了以下值:
name = "name1", value = "value1"
name = "name1", value = "value2"
name = "name2", value = "value3"
name = "name3", value = "value4"
Run Code Online (Sandbox Code Playgroud)
请注意,"name1"键有两个实例.可以有任意数量的键(因为这是一个列表).
我想将此List转换为一个新列表,该列表只包含唯一键,并将具有相同键名的任何值分组为该键的数组/列表.
所以上面应该成为:
name = "name1", value = "value1", "value2" // value is a string array or list
name = "name2", value = "value3"
name = "name3", value = "value4"
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最简单方法是什么?
最简单的方法是使用ILookup,它基本上类似于字典,但每个键可以有多个值.
您可以执行以下操作来创建查找:
var lookup = list.ToLookup(pair => pair.name,
pair => pair.value);
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样打印名称/值对:
foreach (var nameGroup in lookup)
{
var name = nameGroup.Key;
foreach (string value in nameGroup)
Console.WriteLine("Name: {0}, Value: {1}", name, value);
}
Run Code Online (Sandbox Code Playgroud)