如何用列开始“列表列表”的初始化

时间:2013-01-04 21:59:57

标签: c# arrays list initialization

我有一个列表列表,我想添加值列导向。如下面的代码示例所示:

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]

如何使用列将值添加到列表开头列表中?

5 个答案:

答案 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 >

的详细说明
  1. Enumerable.Range(0, columnCount)

返回具有 columnCount 成员数的 Int 的 IEnumerable 集合。

  1. .Select(i => new List<double>())

对于上一步返回的集合的每个元素,运行一个函数“new List()”并将输出(初始化为空的双精度列表)存储在 IEnumerable 集合中(所以我们得到 IEnumerable> 与columnCount 成员数)。

  1. .ToList();

将上述步骤中的集合 IEnumerable> 转换为 List - 所需的输出。