【问题标题】:Converting List<T> to Array (multidimensional) [duplicate]将 List<T> 转换为数组(多维)
【发布时间】:2012-07-02 23:45:12
【问题描述】:

可能重复:
How can I convert a list<> to a multi-dimensional array?

为此,我想要一个double[,] 形式的数组,因为我不知道这个数组的长度是多少,我想先创建一个List,然后再使用List&lt;T&gt;.ToArray() 将其转换为double[,]:

public double[,] FilterClampedData(double[,] data)
{
    var finalData = new List<double[]>();

    //Do some stuff on parameter

    return finalData.ToArray(); ///Does not compile :(
}

【问题讨论】:

  • A List&lt;double[]&gt; 只有在数组长度相同的情况下才可能转换为 double[,]。它可以轻松转换为double[][](这就是ToArray 返回的内容)。如果您不清楚,请比较 msdn.microsoft.com/en-us/library/2yd9wwz4msdn.microsoft.com/en-us/library/2s05feca
  • 您的方法签名将二维数组指示为返回,而您返回的是一维数组。实际上,您正在返回一个数组数组。
  • 如果你的返回值为double[][]
  • “不。事实上,这些不一定是兼容的数组”stackoverflow.com/a/678211/284240
  • 这不是我第一次在 SO 上看到这个问题。

标签: c# .net list multidimensional-array


【解决方案1】:

既然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 中所有列表的长度相同。

【讨论】:

  • 你的意思是finalData.Count?我找不到 .Length 属性
  • @Sean87 没错,你是对的,它是Count,而不是Length
  • 我猜 OP 已经知道 C 除非结果是锯齿状的。
【解决方案2】:
  1. 实例化一个具有最大大小[列表长度,列表中最大数组长度]的新双精度数组
  2. 使用 double for 循环遍历列表(首先在列表中,嵌套在当前列表项上)并填充新数组

【讨论】:

    【解决方案3】:

    finalData.ToArray() 将产生double[][] 因为:

    • List&lt;T&gt;.ToArray() 返回T[]
    • List&lt;T[]&gt;.ToArray() 返回T[][]

    【讨论】:

    • 这与这里的exactly opposite statement [第一行] - stackoverflow.com/a/11295805/763026 不矛盾吗?
    • @AngshumanAgarwal:“由于 ToArray 返回一个一维数组”——是的,它是正确的,与我的陈述相同。 List.ToArray() 返回 T[]。 List.ToArray() 返回 T[][].
    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多