向列表中添加多维数组
本文关键字:数组 添加 列表 | 更新日期: 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
)和用它们做什么(将每个内部结果放入数组,并将其结果放入列表)时,有些人会认为这更有表现力