将1D阵列存储到2D

时间:2015-05-17 06:15:31

标签: c++ arrays multidimensional-array

如何将1D数组9存储到3x3的2D数组中?这是我目前的尝试:

    for (j = 0; j < 3; j++)
    {
        if (i = 0)
        {
            a[i][j] = (int)data1[j];
        }
        if (i = 1)
        {
            a[i][j] = (int)data1[j + 3];
        }
        if (i = 2)
        {
            a[i][j] = (int)data1[j + 6];
        }
    }
}

4 个答案:

答案 0 :(得分:4)

类似的东西:

for (int i = 0; i < 9; i++)
{
  a[i / 3][i % 3] = data[i];
}

正如ThisHandleNotInUse指出的那样,MayBE根据具体情况进行了更优化,并且仍然可以通过微小的调整扩展到更大的数组。

for (int i = 0; i < 9; i += 3)
{
  for (int j = 0; j < 3; j++)
  {
    a[i][j] = data[i + j];
  }
}

答案 1 :(得分:1)

首先。逻辑等号必须写成:if (i == 0) 这将检查条件。

if (i=0)

是不正确的,因为你为我做了分配操作员

你可以试试这个:

for (i = 0; i < 3; i++)
{
  for (j = 0; j < 3; j++)
  {
     if(i == 0)
     {
         a[i][j] = (int)data1[j];
     }
     if (i == 1)
     {
         a[i][j] = (int)data1[j+3];
     }
     if (i == 2)
     {
         a[i][j] = (int)data1[j+6];
     }
 }
}

答案 2 :(得分:0)

您需要优化程度如何?你的数组包含什么?如果你的数组包含结构,无论你做什么,你都会复制它们。如果它包含引用,那么无论你做什么,你都将复制它们(引用)。

如果我经常将数组[9]转换为数组[3,3],我会这样做:

(arr = Old Array)

Array[,] NewArr = new Array[,]{ { arr[0], arr[1], arr[2] }, {arr[3], arr[4], arr[5]}, {arr[6], arr[7], arr[8]} };

编辑:下面的评论者指出你使用的是锯齿状数组而不是多维数组,在这种情况下,在C#中,语法将是:

Array[][] NewArr = new Array[][]{ new Array[]{ arr[0], arr[1], arr[2] }, new Array[]{ arr[3], arr[4], arr[5]}, new Array[]{ arr[6], arr[7], arr[8] }  };

答案 3 :(得分:0)

如果你用c ++编码,如果(I = 2)不正确,那应该是if(I == 2)并且我不确定你为什么需要那个

一种可能的解决方案是拥有两个嵌套的for循环,如下所示:a [i] [j] = data [j * 3 + i]。如果需要则不。