向列表中添加多维数组

本文关键字:数组 添加 列表 | 更新日期: 2023-09-27 17:55:04

我有一个包含任意行数和列数的多维双数组:

var values = new double[rows, columns];

我也有一个双精度数组列表:

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

现在,我想将多维数组中的每一列添加到列表中。我怎么做呢?我写这个是为了说明我想要什么,但它不起作用,因为我违反了语法。

for (int i = 0; i < columns; i++)
{
    doubleList.Add(values[:,i];
}

向列表中添加多维数组

var values = new double[rows, columns];
var doubleList = new List<double[]>();
for (int i = 0; i < columns; i++)
{
    var tmpArray = new double[rows];
    for (int j = 0; j < rows; i++)
    {
        tmpArray[j] = values[j, i];
    }
    doubleList.Add(tmpArray);
}

您需要为每个列创建一个新数组,并将每个值复制到其中。
使用简单的for循环(如其他答案所示)或使用LINQ:

for (int i = 0; i < columns; i++)
{
    double[] column = Enumerable.Range(0, rows)
        .Select(row => values[row, i]).ToArray();
    doubleList.Add(column);
}

用你的方法:

for(int i = 0; i != columns; ++i)
{
    var arr = new double[rows];
    for(var j = 0; j != rows; ++j)
        arr[j] = values[j, i];
    doubleList.Add(arr);
}

按行构建每个数组,然后添加。

另一个方法是:

var doubleList = Enumerable.Range(0, columns).Select(
  i => Enumerable.Range(0, rows).Select(
    j => values[j, i]).ToArray()
  ).ToList()

在定义取什么(values[j, i]i的序列的内部序列的j)和用它们做什么(将每个内部结果放入数组,并将其结果放入列表)时,有些人会认为这更有表现力