c# - 我应该在 linq 搜索中使用字典还是列表?

标签 c# linq list dictionary

我正在使用 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 个网格,每个网格中的几个单元将在每个周期中被处理。

最佳答案

第二种方法行不通,因为数组不会覆盖 GetHashCodeEquals以一种使用存储在数组中的数据的方式。但是,由于线性搜索,第一种方法对于包含大量单元格的集合来说会很慢。

更好的方法是使用 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/

相关文章:

c# - T4 生成的代码需要访问不同的命名空间/项目

c# - 为什么 is 或 as 运算符的左侧不允许使用 lambda 和匿名方法?

linq - 错误地创建了一个应用联接

r - 从包含特定字符串的嵌套列表中删除项目

list - DataTable中的Flutter DropdownButton,列表中的DropdownButton选项

c# - Linq 结果如果为空则为零

c# - 在 LINQ 中使 UNION 查询更高效

c# - Linq 匿名类型成员必须在子查询中声明

python - 将用户输入添加到列表的功能

c# - Linq to XML - 更新/更改 XML 文档的节点