C# 如何使用复合键从字典中获取值?

C# 如何使用复合键从字典中获取值?,c#,.net,dictionary,C#,.net,Dictionary,我的程序有一个单元格网格,我希望能够有效地按行或列编号进行查询。我应该使用什么样的结构来执行此操作 例如,我希望有以下方法: CellsCollection.GetCell(Int32 row, Int32 column) CellsCollection.GetAllCellsInRow(Int32 row) CellsCollection.GetAllCellsInColumn(Int32 column) 我的第一次尝试是创建一个包含两个字段(行和列)的结构,然后创建一个包含struct:d

我的程序有一个单元格网格,我希望能够有效地按行或列编号进行查询。我应该使用什么样的结构来执行此操作

例如,我希望有以下方法:

CellsCollection.GetCell(Int32 row, Int32 column)
CellsCollection.GetAllCellsInRow(Int32 row)
CellsCollection.GetAllCellsInColumn(Int32 column)
我的第一次尝试是创建一个包含两个字段(行和列)的结构,然后创建一个包含struct:
dictionary
复合键的字典

CellsCollection.GetCell(Int32行,Int32列)
没有问题,因为我将通过复合键查询字典

另外两个(获取行/列中的单元格)会出现问题,因为如果我这样做:

dictionary.Where(keyPair=>keyPair.Key.Row == row).Select(keyPair=>keyPair.Values.Cell)
然后,dictionary键变得没有意义,程序必须遍历dictionary中的每个键

我想到了一个嵌套字典(外部字典带有行键,内部字典带有列键),但我认为只有在按行而不是按列查询时,这才有帮助


你如何克服这个问题呢?

如果你的索引中有空白,那么字典就是最好的选择。如果你有一个网格的细胞,那么我猜那不是事实(除非你有很多空细胞)

那么,为什么不使用二维数组呢?e、 g

int[,] cells = new int[maxRow,maxColumn];
这样,如果您想查询特定的单元格,只需执行以下操作

int cellValue = cells[row,column]

如果要将所有内容都排成一行:

for(int col = 0; col < maxColumn; col++)
    int cellValue = cells[row, col];
for(int col=0;col

public IEnumerable GetAllCellsRow(Int32行)
{
for(int col=0;col
对于列中的所有内容,都是类似的

for(int row = 0; row < maxRow; row++)
    int cellValue = cells[row, column];
for(int row=0;row

public IEnumerable GetAllCellsInColumn(Int32列)
{
对于(int row=0;row
如果你的索引中有空白,那么字典就是最好的选择。如果你有一个网格的细胞,那么我猜那不是事实(除非你有很多空细胞)

那么,为什么不使用二维数组呢?e、 g

int[,] cells = new int[maxRow,maxColumn];
这样,如果您想查询特定的单元格,只需执行以下操作

int cellValue = cells[row,column]

如果要将所有内容都排成一行:

for(int col = 0; col < maxColumn; col++)
    int cellValue = cells[row, col];
for(int col=0;col

public IEnumerable GetAllCellsRow(Int32行)
{
for(int col=0;col
对于列中的所有内容,都是类似的

for(int row = 0; row < maxRow; row++)
    int cellValue = cells[row, column];
for(int row=0;row

public IEnumerable GetAllCellsInColumn(Int32列)
{
对于(int row=0;row
这太疯狂了,可能会有用!现在,当需要更多的行/列时,如何处理调整数组大小的需要?(为了以防万一,我不能只分配最大数量的行和列)。我用字典和数组进行了测试,数组速度更快,占用的内存更少。这太疯狂了,它可能会工作!现在,当需要更多的行/列时,如何处理调整数组大小的需要?(为了以防万一,我不能只分配最大数量的行和列)。我用字典和数组进行了测试,数组速度更快,占用的内存更少。