2012-08-30 37 views
1

我需要創建如下容器:Container.Add(RowIndex,ValueIndex);C#容器:行,索引

我知道Dictionary只有Key和Value,這對我不好。 而我也不知道如何使用2個容器來創建行,索引我想要的。

所以例如:

Container[Row][Index]: 
Container[0][0] = "Apple"; 
Container[0][1] = "Orange"; 
Container[1][0] = "Number"; 

因爲我嘗試使用該容器讀取SQL。當我得到下一個結果時,它將添加到當前行值+1。和指數平均值字段值。

在代碼:

   int row = 0; 

       while (ObjReader.Read()) 
       { 
        foreach (var result in ObjReader) 
         ReadList.Add(row, result.ToString()); 

        row++; 
       } 

       ObjReader.NextResult(); 

,這是用於讀取

現在得到導致另一個類

public string Field(int row, int index) 
    { 
     return ReadList[row][index]; 
    } 
+2

一個二維數組或字典? –

回答

5

看來你正在尋找ListList秒。

List<List<string>> results = new List<List<string>>(); 

while (haveMoreRows) 
{ 
    List<string> nextRow = new List<string>(); 
    foreach (var item in currentRow) 
     nextRow.Add(item.ToString()); 

    results.Add(nextRow); 
} 

現在你可以這樣做:results[2][1]在第2列第3行中獲得的價值。

+0

唯一可能的問題是每行可以有不同數量的列;這個(像大多數嵌套集合)是一個「鋸齒狀」的二維集合。如果你想要更像一個表的東西,你需要將二維列表包裝在一個自定義類中,該類將「修復」第二個維度,然後在你想要的表的許多列上進行修復。 – KeithS

+0

@KeithS如果已知數量的固定列,我寧願有一個類表示一行(每列一個屬性),然後有一個列表(或IEnumerable)的那些。這個問題似乎意味着,一開始就沒有足夠的信息來做到這一點。 – Servy

+0

非常真實,我只是指出一個事實,即嵌套列表不能保證任何特定的列是或不可用於每一行。但是,他想要使用它的方式應該會導致所有行中的列數有規律,所以這是一個完全可行的解決方案和+1。 – KeithS

0

iteratortype anonymous

迭代器嘗試使用關鍵字產量

foreach (var result in ObjReader) 
{ 
     yield return result.ToString(); 
} 

您將有IEnumerable的

1

使用一條簡單的類:

public class Pair<P, T> 
{ 
    public Pair() { } 
    public Pair(P first, T second) 
    { 
     First = first; 
     Second = second; 
    } 
    public P First { get; set; } 
    public T Second { get; set; } 
} 

使用:

List<Pair<int, string>> ReadList = new List<Pair<int, string>>(); 
while (ObjReader.Read()) 
{ 
    foreach (var result in ObjReader) 
     ReadList.Add(new Pair<int, string> { 
      First = row, 
      Second = result.ToString() 
     }); 

    row++; 
} 

ObjReader.NextResult(); 
0

聽起來像你真正想要的是一個DataTable。它是專門用來表示數據庫表的行和列的集合。