2013-01-04 51 views
1

我有一个列表的列表,我想添加值列的导向。如下面的代码样本:我如何开始初始化“列表清单”列

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] 

我如何添加值列表的名单开始的列?

回答

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); 
    } 
} 
+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); 
    } 
} 
+0

嗨!这不是我问的。该解决方案逐行添加值。我需要逐列添加值(垂直)。 –

+0

列表列表中既没有行也没有列。我将添加有关使用具有行和列的矩阵的代码。 – SWeko

+0

我想尝试用视觉来表示它,以便更好地理解。谢谢你的时间我得到了我的答案。 –

0

简而言之:你必须初始化每个集合List<T>里面的你的父母List<T>集合。

如您所知,集合的初始化在.NET Framework中执行throw关键字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); 
} 
+0

嗨!这不是我问的。该解决方案逐行添加值。我需要逐列添加值(垂直)。 –

+0

@UmutCanKöseali琐碎的变化。只需首先初始化所有内部列表,然后在创建后将项目添加到每个列表中。 – Servy

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); 
     } 
    }