从键/值对中提取唯一键,并将值分组到数组中

Obi*_*obi 2 c# arrays

假设我有一个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)

实现这一目标的最简单方法是什么?

Met*_*ght 7

最简单的方法是使用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)