2013-01-04 55 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); 
     } 
    }