如何将数组列表转换为多维数组

我需要将以下集合转换为double [,]:

 var ret = new List<double[]>();

列表中的所有数组都具有相同的长度。最简单的方法ret.ToArray()产生double []

[],这不是我想要的。当然,我可以手动创建一个新数组,然后循环复制数字,但是还有一种更优雅的方法吗?

我的库是从另一种语言Mathematica调用的,该语言尚未在.Net中开发。我认为语言无法利用锯齿状数组。我必须返回一个多维数组。

回答:

我不认为该框架中内置了任何功能,即使Array.Copy在这种情况下也无法实现。但是,通过循环编写代码很容易:

using System;

using System.Collections.Generic;

class Test

{

static void Main()

{

List<int[]> list = new List<int[]>

{

new[] { 1, 2, 3 },

new[] { 4, 5, 6 },

};

int[,] array = CreateRectangularArray(list);

foreach (int x in array)

{

Console.WriteLine(x); // 1, 2, 3, 4, 5, 6

}

Console.WriteLine(array[1, 2]); // 6

}

static T[,] CreateRectangularArray<T>(IList<T[]> arrays)

{

// TODO: Validation and special-casing for arrays.Count == 0

int minorLength = arrays[0].Length;

T[,] ret = new T[arrays.Count, minorLength];

for (int i = 0; i < arrays.Count; i++)

{

var array = arrays[i];

if (array.Length != minorLength)

{

throw new ArgumentException

("All arrays must be the same length");

}

for (int j = 0; j < minorLength; j++)

{

ret[i, j] = array[j];

}

}

return ret;

}

}

以上是 如何将数组列表转换为多维数组 的全部内容, 来源链接: utcz.com/qa/419142.html

回到顶部