2017-07-02 110 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];

相关问题