我有一个列表列表,我想添加值列导向。如下面的代码示例所示:
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
}
}
我知道它不起作用,因为Data的索引在当前情况下不存在,我需要使用add()方法。
但是,我需要使用列添加列表开头的值:
[1 , null] ----> [1, null]
[null, null] [2, null]
如何使用列将值添加到列表开头列表中?
答案 0 :(得分:1)
您需要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<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);
}
}
答案 1 :(得分:1)
由于您知道所需的列数和行数,因此您可能会考虑使用数组而不是列表。初始化数组时,数组的所有成员都初始化为其默认值。这将使你的代码
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);
}
}
答案 2 :(得分:1)
您需要创建放置在外部列表列表中的实际列表:
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);
}
}
答案 3 :(得分:0)
简而言之:您必须初始化您父级List<T>
集合内的每个List<T>
集合。
如您所知,集合的初始化是在.NET Framework中抛出关键字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);
}
答案 4 :(得分:0)
使用一行代码初始化列表列表 (List>) 的一种流行方法是使用 LINQ,如下所示:
List<List<double>> Data = Enumerable.Range(0, columnCount).Select(i => new List<double>()).ToList();
这将产生一个双类型空初始化列表的列表。从这里开始,每个内部列表都可以作为 Data[i] 访问,元素可以作为 Data[i].Add(double) 添加到其中。
以下是 LINQ 方法初始化 List >
Enumerable.Range(0, columnCount)
返回具有 columnCount 成员数的 Int 的 IEnumerable 集合。
.Select(i => new List<double>())
对于上一步返回的集合的每个元素,运行一个函数“new List()”并将输出(初始化为空的双精度列表)存储在 IEnumerable 集合中(所以我们得到 IEnumerable> 与columnCount 成员数)。
.ToList();
将上述步骤中的集合 IEnumerable> 转换为 List
- 所需的输出。