2017-07-02 92 views
-3

我的數據存儲在元組結構:如何在循環中顯示元素元組int,int?

Dictionary<Tuple<int, int>, object> data = new Dictionary<Tuple<int, int>, object>(); 

我填的數據,如爲:

for (int i = 1; i < range.RowCount() + 1; i++) 
      { 
       for (int j = 1; j < range.ColumnCount() + 1; j++) 
       { 
        data.Add(new Tuple<int, int>(i, j), ws.Cell(i, j).Value); 
       } 
      } 

現在,我嘗試從data顯示每個字段除外第一行:

for (int i = 1; i < data.Count + 1; i++) 
      { 
       for (int j = 1; j < data.Count + 1; j++) 
       { 
        data[i, j]; 
       } 
      } 

如何要做到這一點?

+0

你在字典中的鍵是'Tuple ',所以你不能通過'int'鍵得到值,就像'data [i]' –

+0

我有'data'作爲矩陣Excel。我需要避免第一行(標題),並獲得每個字段的值。 – ITMANAGER

+1

您可以使用自定義的EqualityComparer創建'Dictionary'並嘗試訪問像'data [new tuple (i,j)]' –

回答

1

我認爲你使用的工具是錯誤的工具。這將是使用二維數組容易得多:

var data = new object[range.RowCount() + 1, range.ColumnCount() + 1]; 

for (int i = 1; i < range.RowCount() + 1; i++) 
{ 
    for (int j = 1; j < range.ColumnCount() + 1; j++) 
    { 
     data[i, j] = ws.Cell(i, j).Value; 
    } 
} 

for (int i = 1; i < data.GetLength(0) + 1; i++) 
{ 
    for (int j = 1; j < data.GetLength(1) + 1; j++) 
    { 
     Console.WriteLine(data[i, j]); 
    } 
} 

(我一直在你的基於1的索引,但我覺得這是更直觀的使用從0然後訪問時遞減的Excel指數array)

+0

錯了謝謝,請告訴請如何在課堂上聲明對象爲public?像這樣:'Object data = new object [,];' – ITMANAGER

+0

'public Object [,] Data;'。你不能在知道尺寸之前初始化它 –

+0

然後我不能用這種方法,因爲我有兩種方法,一種填充,另一種顯示。 – ITMANAGER

0

要考慮的第一件事。當你使用一個對象作爲你的字典中的一個鍵時,如果它不是一個原語或字符串對象,你需要相同的實例來檢索這個值。或者實現你的equals方法來檢查給定的實例是否等於一個已知的密鑰,因爲@George Alexandria評論了here。這在內部使用原始鍵和字符串鍵。 您也可以嘗試循環存儲在字典中的密鑰集。

第二個錯誤的是試圖用2個鍵檢索值。你需要傳遞包含i,j而不是i,j的對象實例。應該作爲下一個:

data [new Tuple(i,j)];

而且不是:

數據[I,J];