【问题标题】:How to convert an array to a dictionary using LINQ如何使用 LINQ 将数组转换为字典
【发布时间】:2018-02-16 09:29:10
【问题描述】:

我有一个字符串数组,我想使用 Linq 将其转换为 Dictionary。 我希望具有 偶数索引(包括零)的元素是 ,而元素具有 奇数索引 成为字典中的。我使用for loop 创建了一个字典:

string[] arr = new string[4];
arr[0] = "John";
arr[1] = "A";
arr[2] = "Luke";
arr[3] = "B";

Dictionary<string, string> myDict = new Dictionary<string, string>();

for (int i = 0; i < arr.Length - 1; i += 2)
{
    myDict.Add(arr[i], arr[i + 1]);
}

//myDict -> { { "John", "A" },{"Luke","B"} }

现在我很好奇如何使用 LINQ ToDictionary():

myDict = arr.ToDictionary();

【问题讨论】:

  • 你检查ToDictionary的语法了吗?您需要先组合名称和字母。之后就很简单了
  • 简单的答案是你不能。您必须创建一个对象或类似{ Name = "John", Something = "A" } 的东西,然后在这些元素的数组上使用ToDictionary(),例如:arr.ToDictionary(a =&gt; a.Name, a =&gt; a.Something);

标签: c# arrays linq dictionary


【解决方案1】:

你可以这样说(在 Linq 的情况下,我们可以利用 Enumerable.Range 作为循环):

string[] arr = new string[] {
  "John", "A",
  "Luke", "B",
}  

var myDict = Enumerable
  .Range(0, arr.Length / 2)
  .ToDictionary(i => arr[2 * i], 
                i => arr[2 * i + 1]); 

Console.WriteLine(string.Join(Environment.NewLine, myDict));

结果:

[John, A]
[Luke, B]

【讨论】:

    【解决方案2】:

    您可以按索引除以 2 进行分组。试试这个代码:

    string[] arr = new string[4];
    arr[0] = "John";
    arr[1] = "A";
    arr[2] = "Luke";
    arr[3] = "B";
    
    var dict = arr.Select((s, i) => new {s, i})
        .GroupBy(x => x.i / 2)
        .ToDictionary(g => g.First().s, g => g.Last().s);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 2017-08-11
      • 2019-09-15
      • 1970-01-01
      • 2016-03-11
      • 2013-07-29
      相关资源
      最近更新 更多