C# 将偶数键和奇数值数组转换为字典的最优雅的方法?

C# 将偶数键和奇数值数组转换为字典的最优雅的方法?,c#,arrays,C#,Arrays,我有一个具有交替键和值的数组,因为我不知道如何在默认绑定器的GET-in-url中传递字典 字符串数组进入控制器ok: string[] values = new string[] {"123", "Pie", "456", "Cake"}; 我需要把它转换成字典: Dictionary<int,string> Deserts = new Dictionary<int,string>() { {123, "Pie"}, {456, "Cake"} }; 但这会

我有一个具有交替键和值的数组,因为我不知道如何在默认绑定器的GET-in-url中传递字典

字符串数组进入控制器ok:

string[] values = new string[] {"123", "Pie", "456", "Cake"};
我需要把它转换成字典:

Dictionary<int,string> Deserts = new     Dictionary<int,string>() { {123, "Pie"}, {456, "Cake"} };
但这会在运行时产生错误。找不到索引。

使用for循环

var deserts = new Dictionary<int,string>();
for (var i = 0; i < values.Length; i += 2) {
    deserts.Add(int.Parse(values[i]), values[i+1]);
}
var dests=newdictionary();
对于(变量i=0;i
简单循环就可以了(我个人也会这样做),但如果您想使用LINQ,可以使用from库。看起来是这样的:

values.Windowed(2).ToDictionary(v => int.Parse(v.First()), v => v.Last());
您也可以使用
选择
+
GroupBy

values.Select((Value, Index) => { Value, Index })
      .GroupBy(x => x.Index / 2)
      .ToDictionary(g => int.Parse(g.First().Value), g => g.Last().Value);

但是我不认为它是优雅的。

您喜欢
值吗。其中(v=>values.IndexOf(v)%2==0)。ToDictionary(v=>int.Parse(v),v=>values[values.IndexOf(v)+1])?想一想,要把代码写到DMO上会发生什么,这有点糟糕。我会使用@Gonzalo显示的for循环。它更容易阅读,也更容易理解。此外,由于双重查找,代码的效率会降低。如果使用相同的字符串,则对列表加索引进行多次扫描将无法正常工作
values.Select((Value, Index) => { Value, Index })
      .GroupBy(x => x.Index / 2)
      .ToDictionary(g => int.Parse(g.First().Value), g => g.Last().Value);