我正在尝试制作自己的矩阵数学类,这是我正在使用的构造函数。
public Matrix (int numRows, int numCols)
{
_matrix = new List<List<double>>(numRows);
// initializes each list
for(int i = 0; i < numRows; i++)
{
_matrix[i] = new List<double>(numCols);
}
}
当我尝试使用它时,它会抛出一条ArgumentOutOfRangeException
线
_matrix [i] =新列表(numCols);
我究竟做错了什么?
的列表(Int32)已 capacity
构造器参数并没有设定元件的数目; 它设置容量。容量是内部数组的大小,而不是集合实际实现的元素数。
由于新列表具有0个元素(仅设置内部容量),_matrix[anyValue]
因此超出范围。
如果需要矩阵的LoL(列表列表),使用LINQ可以很容易地创建它。
_matrix = Enumerable.Range(0, numRows)
.Select(r => (new double[numCols]).ToList())
.ToList();
替代的LoL生成,它手动将每一列添加到一行,然后将每一行添加到矩阵。
_matrix = new List<List<double>>();
for (var r = 0; r < numRows; r++) {
var row = new List<double>();
for (var c = 0; c < numCols; c++) {
row.Add(0);
}
_matrix.Add(row);
}
或使用AoA(Array of Array)和double[][]
结果;大小更改时列表会更好,这可能不适用于此处。
double[][] m = Enumerable.Range(0, numRows)
.Select(r => new double[numCols])
.ToArray();
甚至使用多维数组,它可能比上面的方法更合适。由于数组不可调整大小,因此与“列表容量”参数不同,该大小用于设置边界。
double[,] m = new double[numRows,numCols];
请参阅以下问题,这些问题也与对构造函数参数的错误使用有关
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句