C#中的多维数组

3 c# arrays multidimensional-array

我在C#中定义了这个多维数组:

int[,] values = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
Run Code Online (Sandbox Code Playgroud)

现在值不再是这种形式,而是在词典中:

values2.Add("KeyA", new List<float> {1,4});
values2.Add("KeyB", new List<float> {2,5});
values2.Add("KeyC", new List<float> {3,6});
Run Code Online (Sandbox Code Playgroud)

现在我试图再次在二维数组中解析这个字典,但不知何故有问题:

List<float> outList = new List<float>();
values2.TryGetValue(values2.Keys.ElementAt(0) as string, out outList);

int[,] values = new int[outList.Count, values2.Keys.Count];

for (int i = 0; i < values2.Keys.Count; i++)
{
   List<float> list = new List<float>();
   values2.TryGetValue(values2.Keys.ElementAt(i), out list);

   for (int j = 0; j < list.Count; j++)
   {
       values[i, j] = Convert.ToInt32(list.ElementAt(j));
   }
}
Run Code Online (Sandbox Code Playgroud)

这会抛出一个InnerException:System.IndexOutOfRangeException.但为什么?我无法正确转换值.

编辑:我可以假设字典中的所有值都具有相同的列表长度.我在其他地方检查这个.

Jon*_*eet 5

我认为这很简单,无论是你的长度还是你的索引是错误的方式.这是你的数组创建:

int[,] values = new int[outList.Count, values.Keys.Count];
Run Code Online (Sandbox Code Playgroud)

而你则设置values[i, j]在那里i小于metrics.Keys.Countj低于list.Count.

你可以任意切换长圆形设置values[j, i]来代替.鉴于数组的原始陈述,我怀疑你想要后一种方法.