C# 转换列表<;T>;到数组(多维)
可能重复:C# 转换列表<;T>;到数组(多维),c#,.net,list,multidimensional-array,C#,.net,List,Multidimensional Array,可能重复: 我想要一个double[,]形式的数组,因为我不知道这个数组的长度,我想先制作一个列表,然后再使用List.ToArray()将其转换为double[,]: public double[,] FilterClampedData(double[,] data) { var finalData = new List<double[]>(); //Do some stuff on parameter return finalData.ToArray
我想要一个
double[,]
形式的数组,因为我不知道这个数组的长度,我想先制作一个列表
,然后再使用List.ToArray()
将其转换为double[,]
:
public double[,] FilterClampedData(double[,] data)
{
var finalData = new List<double[]>();
//Do some stuff on parameter
return finalData.ToArray(); ///Does not compile :(
}
public double[,]FilterClampedData(double[,]数据)
{
var finalData=新列表();
//做一些关于参数的事情
返回finalData.ToArray();///不编译:(
}
finalData.ToArray()
将产生double[][]
,因为:
返回List.ToArray()
T[]
返回List.ToArray()
T[][]
由于
ToArray
返回一维数组,因此不编译也就不足为奇了。但是,如果您返回double[][]
,它会编译。您也可以使用两个嵌套循环手动构建二维数组:
var R = finalData.Count;
var C = finalData[0].Length;
var res = new double[R, C];
for (int r = 0 ; r != R ; r++)
for (int c = 0 ; c != C ; c++)
res[r, c] = finalData[r][c];
return res;
上面的代码假设您在
finalData
中至少有一项,并且finalData
中所有列表的长度都相同。AList
只能在数组长度相同的情况下转换为double[,]
。它可以轻松转换为double[][
(这就是ToArray
返回的内容)。如果您不清楚这一点,请进行比较,并在返回一维数组时将方法签名指示二维数组作为返回。事实上,您返回的是数组数组数组。如果返回值为double[][
“不。事实上,这些阵列不一定是兼容的"这不是我第一次在网上看到这个问题。你是说finalData.Count
?我找不到.Lengthproperty@Sean87当然,你是对的,它是Count
,而不是Length
。我想OP应该已经知道C
,除非结果是参差不齐的。这与完全相反的说法不矛盾吗
这里[第一行]-?@AngshumanAgarwal:“因为ToArray返回一维数组”-是的,它是正确的,并且等于我的语句。List.ToArray()返回T[]。List.ToArray()返回T[]。