代码之家  ›  专栏  ›  技术社区  ›  Mark

将列表<double[]>转换为double[,]

  •  2
  • Mark  · 技术社区  · 14 年前

    说我有一个

    List<double[]> x = new List<double[]>();
    double[] item = new double[] {1.0,2.0,3.0};
    x.add(item);
    etc...
    

    有没有一种更快/更干净的方法将其放入双[,]然后循环:

    double[,] arr = new double[x.Count,3];          
    for (row = 0; row < x.Count; row++)
    {
        for (col = 0; col < 3; col++)
            arr[row,col] = x[row][col];
    }
    

    谢谢。

    3 回复  |  直到 14 年前
        1
  •  3
  •   SLaks    14 年前

    不,没有。

    多维阵列是一种奇怪的生物,在BCL中没有被广泛接受或使用。

        2
  •  2
  •   Aren    14 年前

    因为我喜欢它,我用LINQ解决了这个问题,但是,它几乎没有任何清洁剂。事实上,我认为它不太清楚,但它很整洁:)

    // Input
    List<double[]> a = new List<double[]>() { 
        new double[]{ 1.0, 2.0, 3.0 },
        new double[]{ 4.0, 5.0, 6.0 },
        new double[]{ 7.0, 8.0, 9.0 }
    };
    
    // Output
    var b = a.Select((item, index) => new 
                { 
                    Items = item.Select((inner, inIndex) => new { Inner = inner, Y = inIndex }),
                    X = index 
                })
                .SelectMany(item => item.Items, (i, inner) => new { Value = inner.Inner, X = i.X, Y = inner.Y })
                .Aggregate(new double[a.Count, a.Max(aa => aa.Length)], (acc, item) => { acc[item.X, item.Y] = item.Value; return acc; })
    

    注意:这也适用于任意大小的内部 double[]

    所以是的,有 另一个 但这不是一个 更好的 方式:)

        3
  •  0
  •   Ekampp    14 年前

    总有一天 var_export 功能?