我正在尝试将admin.add_link(MenuLink(name='Logout', category='', url="/logout"))
admin.add_link(MenuLink(name='Login', category='', url="/login"))
转换为double[,]
,这是表现明智的最佳方式。
答案 0 :(得分:1)
这是 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;
}
答案 1 :(得分:1)
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]);
}
上面的代码假设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();
这就是我们经常避免使用2D数组的原因。