c# jagged array 改变自身
c# jagged array changes itself
我 运行 遇到了问题。我创建了一个锯齿状数组(输入),然后我通过一些函数并期望从中创建另一个锯齿状数组(输出)。但是在那个过程中不知何故原始数组也被改变了。
如何避免改变原始数组?
double[][] input;
double[][] output;
private void button1_Click(object sender, EventArgs e)
{
input = new double[][]
{
new double[] {0,1,2,3 },
new double[] {9,8 },
new double[] {14,5,0 },
new double[] {2.0,2.3,2.5 }
};
output = function(input);
}
static double[][] function (double[][] ins)
{
double[][] ous = ins;
int leng = ins.GetLength(0);
for (int i = 0; i < leng; i++)
{
int lung = ins[i].GetLength(0);
for (int j = 0; j < lung; j++)
ous[i][j] += 14.4;
}
return ous;
}
问题是 ous
变量指向与 ins
相同的数组(参考)。您应该将其复制到新阵列。例如使用 linq:
static T[][] CopyArray<T>(T[][] source)
{
return source.Select(s => s.ToArray()).ToArray();
}
并使用它:
double[][] ous = CopyArray(ins);
我 运行 遇到了问题。我创建了一个锯齿状数组(输入),然后我通过一些函数并期望从中创建另一个锯齿状数组(输出)。但是在那个过程中不知何故原始数组也被改变了。 如何避免改变原始数组?
double[][] input;
double[][] output;
private void button1_Click(object sender, EventArgs e)
{
input = new double[][]
{
new double[] {0,1,2,3 },
new double[] {9,8 },
new double[] {14,5,0 },
new double[] {2.0,2.3,2.5 }
};
output = function(input);
}
static double[][] function (double[][] ins)
{
double[][] ous = ins;
int leng = ins.GetLength(0);
for (int i = 0; i < leng; i++)
{
int lung = ins[i].GetLength(0);
for (int j = 0; j < lung; j++)
ous[i][j] += 14.4;
}
return ous;
}
问题是 ous
变量指向与 ins
相同的数组(参考)。您应该将其复制到新阵列。例如使用 linq:
static T[][] CopyArray<T>(T[][] source)
{
return source.Select(s => s.ToArray()).ToArray();
}
并使用它:
double[][] ous = CopyArray(ins);