C# 如何将多维数组转换为列表<;列表<;双倍>>;?
我正在尝试将一个C# 如何将多维数组转换为列表<;列表<;双倍>>;?,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我正在尝试将一个double[,]转换为列表从性能角度看,最好的方法是什么。下面是一个O(n)转换解决方案。我认为没有比O(n)更快的算法 公共静态列表ConvertToListOfLists(双[,]数组) { 列表结果=新列表(); for(int i=0;i
double[,]
转换为列表
从性能角度看,最好的方法是什么。下面是一个O(n)转换解决方案。我认为没有比O(n)更快的算法
公共静态列表ConvertToListOfLists(双[,]数组)
{
列表结果=新列表();
for(int i=0;i
2D阵列不如锯齿阵列方便,您可以尝试以下方法:
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]);
}
将此代码与jagged数组中简洁但可读的代码进行比较:
double[][]源=。。。
列表结果=源
.Select(line=>line.ToList())
.ToList();
这就是为什么我们经常避免使用2D数组 这场演出对你有多重要?这种转换真的是应用程序中的瓶颈吗?“在性能方面,最好的方法是什么”-如果没有适当的证据,这只会导致大量没有性能数据的固执己见的答案。根据你的意见到目前为止你试过什么?你的绩效指标是什么?你的测量结果与你的目标相比如何?如果您需要帮助,请在此显示一些努力。这决不是我的应用程序中的瓶颈,因为be的强大功能有几个“感兴趣的区域”,使用静态数组,列表可能会很好地解释为什么这是“在性能方面做到这一点的最佳方法”这个答案可能与另一个答案几乎相同,但请注意使用了
列表
构造函数,它需要初始容量,这是一种性能增益,实际上不会影响可读性。
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]);
}
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();