c# - 两个数组合并成一个字典

标签 c# arrays linq dictionary

我想创建一个

 Dictionary<string, int[]> dict

两个数组中的:

string[] keys = { "A", "B", "A", "D" };
int[] values = { 1, 2, 5, 2 };

结果:

["A"] = {1,5} 
["B"] = {2}
["D"] = {2}

有什么方法可以用 LINQ 做到这一点吗? 我读过 Zip,但我认为我无法使用,因为我需要将值添加到现有的 key.value 数组。

最佳答案

使用 .Zip将两个集合绑定(bind)在一起,然后 GroupBy对键进行分组。

string[] keys = { "A", "B", "A", "D" };
int[] values = { 1, 2, 5, 2 };

var result = keys.Zip(values, (k, v) => new { k, v })
                 .GroupBy(item => item.k, selection => selection.v)
                 .ToDictionary(key => key.Key, value => value.ToArray());

然后将这些项目添加到您已有的字典中: 我更改了 int[]List<int>所以更容易处理Add/AddRange

Dictionary<string, List<int>> existingDictionary = new Dictionary<string, List<int>>();
foreach (var item in result)
{
    if (existingDictionary.ContainsKey(item.Key))
        existingDictionary[item.Key].AddRange(item.Value);
    else
        existingDictionary.Add(item.Key, item.Value.ToList());
}

关于c# - 两个数组合并成一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397541/

相关文章:

c# - 基于参数锁定

c# - 是否可以在一个 CRM 调用中查询多个单独的实体?

c# - 在 lambda 表达式中产生返回值?

c# - 通过 XPathSelectElements 获取具有命名空间的 XElement

c# - 将未知对象转换为接口(interface)的泛型接口(interface)(从最初明确的泛型类型到泛型集合类型的类型)

javascript - JavaScript 中的剩余语法

java - 如何对一个对象(实际上是一个数组)进行排序

ruby - 使用 Ruby 进行数组包含检查

c# - 如何使用linq查找具有最大值的项目?

c# linq 如果项目在列表中并从列表中获取匹配项目