代码之家  ›  专栏  ›  技术社区  ›  anon

C语言中的多维数组#

  •  3
  • anon  · 技术社区  · 14 年前

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

    int[,] values = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
    

    现在,这些值不再以这种形式出现,而是出现在字典中:

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

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

    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));
       }
    }
    

    这将引发一个内部异常:System.IndexAutoFrangeException。但为什么呢?我无法正确转换这些值。

    编辑:可以假设字典中的所有值都具有相同的列表长度。我在别的地方查过。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Jon Skeet    14 年前

    我想这很简单 任何一个 你的长度 你的索引方式不对。下面是您的数组创建:

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

    然后你就开始 values[i, j] 哪里 i 小于 metrics.Keys.Count j 小于 list.Count .

    你可以 任何一个 改变长度 设置 values[j, i] 相反。根据数组的原始语句,我 犯罪嫌疑人 你想要后一种方法。