我认为标题很清楚,所以我在这里只写一些个人意见。
考虑一个数字矩阵,C#代码中的等效表示为
double[,]
和
double[][]
分别地使用多维数组(在这种特定情况下为2D)时,可以很容易地看出,不必检查
double[]
或者行的大小相同,这样可以更好地理解核心问题。此外,从我的观点来看,它更准确地描述了矩阵,因为在大多数情况下,矩阵应该被视为单个实体,而不是数组列表。
但使用多维数组可能会导致更多的代码行。如果要对其应用数学运算,例如转置,则必须使用嵌套循环,如
var row = mat.GetLength(0);
var col = mat.GetLength(1);
var newmat = new double[col, row];
for (var i = 0; i < row; i++)
{
for (var j = 0; j < col; j++)
{
newmat[j, i] = mat[i, j];
}
}
使用交错数组,他可以简单地编写
var newmat = Enumerable.Range(0, mat[0].Length - 1).
Select(i => mat.Select(r => r[i]).ToArray()).ToArray();
我不确定哪一个更好。通常我只创建自己的子例程,除非.Net没有提供解决方案,所以我更喜欢后者。但多维数组确实有它的优点,我真的很喜欢。谁能教我如何在两者之间做出选择?