如何初始化List of List呢?同列
本文关键字:List 同列 of 初始化 | 更新日期: 2023-09-27 17:50:39
我有一个列表列表,我想添加面向列的值。如以下代码样例所示:
Data = new List<List<double>>();
for (int i = 0; i < columnCount; i++)
{
for (int j = 0; j < rowCount; j++)
{
Data[j][i] = (probabilityList[j]) * K); // It won't work
}
}
我知道它不会工作,因为数据的索引不存在,在当前情况下,我需要使用add()方法。
但是,我需要添加值到以列开头的列表:
[1 , null] ----> [1, null]
[null, null] [2, null]
如何将值添加到以列开头的列表中?
您需要创建实际的列表,并将其放置在列表的外部列表中:
for (int i = 0; i < rowCount; i++)
{
Data.Add(new List<double>());
}
一旦你创建了所有的内部列表,你可以遍历它们并为它们添加值:
for (int i = 0; i < columnCount; i++)
{
for (int j = 0; j < rowCount; j++)
{
Data[j].Add((probabilityList[j]) * K);
}
}
既然您知道所需的列数和行数,您可能会考虑使用数组而不是列表。初始化数组时,数组的所有成员都初始化为其默认值。这将使您的代码
double[,] Data = new double[columnCount,rowCount];
for (int i = 0; i < columnCount - 1; i++)
{
for (int j = 0; j < rowCount - 1; j++)
{
Data[j,i] = (probabilityList[j]) * K);
}
}
用一行代码初始化列表列表(List
List<List<double>> Data = Enumerable.Range(0, columnCount).Select(i => new List<double>()).ToList();
这将产生一个由空的初始化的double类型列表组成的列表。从这里,每个内部列表都可以作为Data[i]访问,并且可以作为Data[i]添加元素。add (double)
下面是LINQ方法初始化List
-
Enumerable.Range(0, columnCount)
返回IEnumerable Int集合,包含columnCount成员个数。
-
.Select(i => new List<double>())
-
.ToList();
对于上一步返回的集合中的每个元素运行一个函数"new List()"并将输出(初始化为double类型的空列表)存储在IEnumerable集合中(因此我们得到IEnumerable
转换上面步骤中的集合IEnumerable
您需要对List of Lists的每个元素进行new
Data = new List<List<double>>();
for (int i = 0; i < columnCount; i++)
{
List<double> column = new List<double>();
for (int j = 0; j < rowCount; j++)
{
//not really sure if this is the correct code here
//that would depend on your logic
column.Add((probabilityList[j]) * K);
}
Data.Add(column);
}
list不是数组。它没有可以放元素的槽,它更像是一个链。
所以最初你有一个空的List<List<double>>
,它没有List<double>
实例。您必须(显式地)创建这些列表并将其添加到Data
列表中。
或者,如果您确实需要行和列的元素插槽,您可以使用二维矩阵,如下所示:
var matrixData = new double[rowCount, columnCount];
for (int i = 0; i < columnCount; i++)
{
for (int j = 0; j < rowCount; j++)
{
matrixData[j, i] = ((probabilityList[j]) * K);
}
}
总之:您必须初始化在父List<T>
集合内的List<T>
的每个集合。
你可能知道,在。net框架中,集合的初始化是通过关键字new
完成的。否则,所有的内部列表将是Null
,您将无法访问它们。
我已经把这个概念应用到你的代码中。
var mainData = new List<List<double>>();
for (int i = 0; i < columnCount; i++)
{
var innerList = new List<double>();
for (int j = 0; j < rowCount; j++)
{
innerList.Add((probabilityList[j]) * K);
}
mainData.Add(innerList);
}