[英]How to convert multidimensional array to List<List<double>>? [closed]
我正在尝试将double[,]
转换为List<List<double>>
明智地执行此性能的最佳方法是什么。
这是O(n)转换的解决方案。 我认为没有比O(n)更快的算法。
public static List<List<double>> ConvertToListOfLists(double[,] array)
{
List<List<double>> result = new List<List<double>>();
for (int i = 0; i < array.GetLength(0); i++)
{
List<double> row = new List<double>();
for (int j = 0; j < array.GetLength(1); j++)
{
row.Add(array[i, j]);
}
result.Add(row);
}
return result;
}
二维数组不像锯齿数组那么方便,你可以尝试这样的事情:
double[,] source = ...
List<List<double>> result = new List<List<double>>(source.GetLength(0));
for (int i = 0; i < source.GetLength(0); ++i) {
List<double> line = new List<double>(source.GetLength(1));
result.Add(line);
for (int j = 0; j < source.GetLength(1); ++j)
line.Add(source[i, j]);
}
上面的代码假设source
是一个通常的从零开始的数组; 在基于任意数组的非常罕见(几乎是偏执的)情况下(如果要创建这样的数组,请参阅Array.CreateInstance以获取详细信息):
double[,] source = ...
List<List<double>> result = new List<List<double>>(source.GetLength(0));
// please, notice <= comparison
for (int i = source.GetLowerBound(0); i <= source.GetUpperBound(0); ++i) {
List<double> line = new List<double>(source.GetLength(1));
result.Add(line);
// please, notice <= comparison
for (int j = source.GetLowerBound(1); j <= source.GetUpperBound(1); ++j)
line.Add(source[i, j]);
}
将此代码与锯齿状数组的简洁但可读的代码进行比较:
double[][] source = ...
List<List<double>> result = source
.Select(line => line.ToList())
.ToList();
这就是为什么我们经常避免使用二维数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.