我写了一个小项目,它将多个 CSV 文件读入一个锯齿状数组(每个 csv 在 1 个锯齿状数组中)。所有的数组都将存储在一个列表中。之后,我有一个给定的维度,我想将每个数组的大小调整为(具有给定的列和行)。编码:
private void resizeArray( double[][] matrixToResize, int maxRow, int maxColumn)
{
Array.Resize(ref matrixToResize, maxRow);
for (int i = 0; i < matrixToResize.Length; i++)
{
Array.Resize(ref matrixToResize[i], maxColumn);
}
}
private void resizeArrayList(List<double[][]> csvList, Dimension dimension)
{
foreach (Double[][] matrix in csvList)
{
resizeArray(matrix, dimension.Max_Rows, dimension.Max_Columns);
}
}
resizeArrayList
将被称为 1。然后这将调用resizeArray
调整行的大小,然后调整每行给定数量的列的大小。
我的问题:在resizeArray
这一切运作良好,例如:我有5行5列的一个阵列,并希望10行10列,
我首先将此数组大小调整为 10 行,然后将每行调整为 10 列。在resizeArray
返回之前resizeArrayList
看起来不错,我有 10 行,每 10 列。但是在代码回退到该方法之后,resizeArrayList
它有 5 行,每行 10(!) 列。所以基本上列调整大小工作正常,但添加的 5 行消失了,它回到了原来的行大小。
我知道我可以通过将整个锯齿状数组传回并将其读入列表来解决这个问题。但为什么会这样呢?
两次我都使用 resize 函数和 ref。但它只保存列而不是调整大小的行。
您必须matrix
通过引用传递变量,因为在resizeArray
方法中正在修改引用本身。按照您的方式,csvList
列表的所有元素都保持不变——长度为 5 的数组——因为csvList
仍然包含旧引用,即调整大小之前的引用。
但是,matrix
是循环变量,您不能在循环内更改它,这意味着您不能通过引用传递它resizeArray
。因此,我认为您最好创建一个全新的列表作为结果:
private double[][] resizeArray(double[][] matrixToResize,
int maxRow, int maxColumn)
{
Array.Resize(ref matrixToResize, maxRow);
for (int i = 0; i < matrixToResize.Length; i++)
{
Array.Resize(ref matrixToResize[i], maxColumn);
}
return matrixToResize;
}
private void resizeArrayList(List<double[][]> csvList, Dimension dimension)
{
csvList = csvList
.Select(matrix =>
resizeArray(matrix, dimension.Max_Rows, dimension.Max_Columns))
.ToList();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句