我想制作一个锯齿状的数组矩阵,该数组将存储9个1d数组,这些数组代表一个0-9的数字矩阵。我没有写所有从零到9的数字,但是它们都具有相同的大小,唯一的区别是1和0的位置。这部分是成功的,一旦我打印了InitializeMatrices()
的结果,我确实得到了想要的结果。 matrices [0] [34] 将打印“零”矩阵的第35个元素, matrice [1] [2] 将打印“ one”的第3个元素矩阵等等。
问题开始于在DistortMatrices()
内,我尝试在matrixToLearn内制作矩阵的副本(36个副本,其中索引0-17为零矩阵的副本),因此我将修改矩阵的单个副本而不是矩阵本身,并将更改存储在matrixToLearn内部。不幸的是,它似乎并没有我想象的那样起作用。例如
matrixToLearn [0] =矩阵[0]; //将其复制为零数组
matrixToLearn [0] [34] = 0; //它适用于矩阵[0] [34]以及matrixToLearn的所有18个副本,即使在此之后我调用:
matrixToLearn [17] [7] = 0 //它将应用于矩阵[0] [34],matrixToLearn [0] [34],并且所有副本都相同
因此,它似乎可以用作某种指针或smth。
我该如何修复它,以便将矩阵[0]复制到matrixtoLearn [0-17],而对matrixToLearn [0-17]的更改仅适用于自身及其对应的索引,而矩阵不变?在代码下查看---> 预期结果。
public partial class Form1 : Form
{
int[] zero, one, two, three, four, five, six, seven, eight, nine;
int[][] matrices;
int[][] matrixToLearn = new int[36][];
private void InitializeMatrices()
{
zero =
new int[] {
1, 1, 1, 1, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 1,
};
//And so on up to nine
matrices = new int[][]{ zero, one, two, three, four, five, six, seven, eight, nine};
}
//index = 0
private void DistortMatrices(int index)
{
int z = 0;
for (; z < 18; z++)
{
matrixToLearn[z] = matrices[index];
}
matrixToLearn[0][34] = 0;
matrixToLearn[17][7] = 1;
}
}
预期结果
Expected result
matrixToLearn[0]
1, 1, 1, 1, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 0,
matrixToLearn[17]
1, 1, 1, 1, 1,
1, 0, 1, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 1,
matrice[0]
1, 1, 1, 1, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 1,
How it looks right now:
matrixToLearn[0]
1, 1, 1, 1, 1,
1, 0, 1, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 0,
matrixToLearn[17]
1, 1, 1, 1, 1,
1, 0, 1, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 0,
matrices[0]
1, 1, 1, 1, 1,
1, 0, 1, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 1, 1, 1, 0,
编辑:它看起来更进一步,它也修改了“零”矩阵
答案 0 :(得分:1)
matrixToLearn[0] = matrices[0];
这会将引用复制到嵌套数组。就像
float[] x = ...;
float[] y = x; //copies the reference, not the object contents
我通常使用(float[])myArray.Clone()
克隆数组。我把它变成了一个通用的扩展方法。