如何将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];
}
}
}
答案 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]。如果需要则不。