将两个数组合并为一个C#

时间:2019-12-04 15:04:03

标签: c# arrays dictionary

我想创建一个

Dictionary<string, int[]> dict

两个数组中的一个(不同长度):

string[] keys = { "A", "B", "A", "D", "C","E" };
string[] values = { green, blue, yellow};

结果:

["A"] = {green} 
["B"] = {blue}
["D"] = {yellow}
["C"] = {green}
["E"] = {blue}

2 个答案:

答案 0 :(得分:3)

在这种情况下,您的字典为Dictionary<string,string>。 从您的样本看来,您希望让value数组的模数(%)运算符处理数组长度差。

var dict = new Dictionary<string,string>();
for(int i = 0; i < keys.Length; i++) { 
   var j = i % values.Length; 
   dict[keys[i]] = values[j];
}

答案 1 :(得分:2)

您可以尝试一个简单的 Linq

  using System.Linq;

  ...

如果key仅包含唯一个项目:

  // here all keys are unique
  string[] keys = { "A", "B", "C", "D", "E", "F" };
  string[] values = { "green", "blue", "yellow" };

  Dictionary<string, string> result = Enumerable
    .Range(0, keys.Length)
    .ToDictionary(i => keys[i], i => values[i % values.Length]);

如果不是,我们应该在key再次出现时跳过

  // Note, that "A" key repeats twice
  string[] keys = { "A", "B", "A", "D", "C", "E" };
  string[] values = { "green", "blue", "yellow" };

  Dictionary<string, string> result = keys
    .Distinct()
    .Select((key, i) => new {
      key,
      value = values[i % values.Length]
    })
    .ToDictionary(item => item.key, item => item.value);

  Console.Write(string.Join(Environment.NewLine, result));

结果:

[A, green]
[B, blue]
[D, yellow]
[C, green]
[E, blue]