【问题标题】:Two arrays into one Dictinary C# [closed]将两个数组合并为一个字典 C# [关闭]
【发布时间】:2019-12-04 15:04:03
【问题描述】:

我想创建一个

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}

【问题讨论】:

  • 我不确定您的数据是如何精确映射的...您为解决问题做了哪些努力?
  • 那是["A"] , {green} 一对<string, int[]> 吗?
  • 看起来您并不是真的在寻找字典,而是相反:将多个条目映射到单个对象
  • 您的示例结果不能存储在Dictionary<string, int[]> 中。您的示例结果是错误的,或者您需要将所需的结果类型更正为应有的结果。此外,string[] values = { green, blue, yellow } 仅在正确语法的情况下 greenblueyellow 已预定义为 string 常量或 string 变量。抱歉,但细节很重要。

标签: c# arrays dictionary


【解决方案1】:

在这种情况下,您的字典将是 Dictionary<string,string>。 从您的示例中,您似乎希望值数组的模数 (%) 运算符来处理数组长度差异。

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

【讨论】:

  • 看起来他不需要模数,因为 A 和 C 都是绿色的
  • @BartvanderDrift 此代码按用户要求工作,除了他需要首先获取唯一键:keys = keys.Distinct().ToArray();(否则代码仍然有效,但由于重复键被重新分配,因此具有不同的值处理数组时的新值)。
【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2012-10-21
    相关资源
    最近更新 更多