我正在使用 C# 创建一个由单元格组成的网格。单元格将使用“sbyte X”和“sbyte Y”来确定网格中的位置(0,0 是左上角)。 Cell 是一个类,它将在网格中存储自己的位置。
我想知道使用它是否会更好:
List<Cell> CellList
//....
Cell thisCell = CellList.First(cell => cell.X = thisX && cell.Y = thisY);
或者使用字典:
Dictionary<sbyte[], Cell> CellList
//....
Cell thisCell = CellList[new sbyte[2] { thisX , thisY }];
此外,一组单元格通常在每个方向上有 25 到 50 个;所以 625 - 2500 个条目。我有兴趣了解速度和内存问题。可能同时加载总共 7 个网格,每个网格中的几个单元将在每个周期中被处理。
最佳答案
第二种方法行不通,因为数组不会覆盖 GetHashCode
和 Equals
以一种使用存储在数组中的数据的方式。但是,由于线性搜索,第一种方法对于包含大量单元格的集合来说会很慢。
更好的方法是使用 Tuple<sbyte,sbyte>
而不是数组:
Dictionary<Tuple<sbyte,sbyte>, Cell> CellList;
//....
Cell thisCell = CellList[Tuple.Create(thisX , thisY)];
关于c# - 我应该在 linq 搜索中使用字典还是列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17793179/