配对两个数组

时间:2016-07-26 10:28:40

标签: c# linq

假设我有两个总长度相等的数组,它们看起来像这样:

{"A", "C", "A", "A", "B", "B", "A", "A" }
{ 1, 1, 2, 3, 1, 10, 5, 7 }

数据由数组索引配对。

我希望使用LINQ来生成如下所示的结果:

A: { 1, 2, 3, 5, 7 }
B: { 1, 10 }
C: { 1 }

我该如何实现?

数组来自http请求参数。这些字母适用于数据库名称,整数是数据库中表格中的ID。下一步是连接到每个数据库并获取每个id的一些数据。

2 个答案:

答案 0 :(得分:9)

您可以先Zip个,然后将它们分组。使用分组结果构建字典或任何您想要的类型。

string[] first = { "A", "C", "A", "A", "B", "B", "A", "A" };
int[] second = { 1, 1, 2, 3, 1, 10, 5, 7 };

var list = first.Zip(second, (f, s) => new { First = f, Second = s });

Dictionary<string, int[]> d = list.GroupBy(i => i.First)
                                  .ToDictionary(k => k.Key, v => v.Select(val => val.Second)
                                                                  .ToArray()
                                               );

答案 1 :(得分:0)

试试这个

string[] s = { "A", "C", "A", "A", "B", "B", "A", "A" };
int[] t = { 1, 1, 2, 3, 1, 10, 5, 7 };

var results = s.Select((x, i) => new { s = x, t = t[i] })
    .GroupBy(x => x.s).ToList();