当我不需要快速访问它们的值时,是否可以使用字典?

本文关键字:是否 可以使 字典 不需要 访问 | 更新日期: 2023-09-27 18:13:38

通常,我使用像列表一样的字典,但使用不同类型的键。我喜欢快速访问字典中各个条目的能力,而不必遍历它,直到我找到具有正确属性的条目(因为我正在寻找的属性在Key中)。

但是字典还有另一种可能的用法。我可以只使用Key来存储属性A, Value来存储属性B,而不使用字典的特殊功能。例如,我可以通过将名字存储在键中并将姓氏存储在值中来存储人员列表(为了简单起见,我们假设永远不会有两个人具有相同的名字,因为我想不出更好的示例)。我只使用该字典在foreach循环中遍历它并向其中添加项(不删除、排序或访问单个项)。使用List<KeyValuePair<string, string>>和使用Dictionary<string, string>实际上没有区别(至少在我给出的示例中没有区别-我知道我可以例如在列表中存储具有相同键的多个项目)。

那么,总结一下,当我不需要使用字典提供的特殊功能而只是使用它来存储恰好有两个属性的东西时,我该怎么办呢?
  • 使用Dictionary<,>
  • 使用List<KeyValuePair<,>
  • 使用List<MyType>, MyType是包含两个属性和一个构造函数的自定义类。

当我不需要快速访问它们的值时,是否可以使用字典?

不要使用字典。

如果您不想为此目的创建类,请使用List<Tuple<T1,T2>>之类的东西。但是请记住,自定义类将更具可读性和灵活性。

原因如下:如果使用适当的数据结构,将使更容易阅读代码。使用字典只会让读者感到困惑,而且有一天出现了重复的密钥,你就会遇到问题。

如果有人读了你的代码,看到使用了一个Dictionary,他会认为你真的想使用一个类似map的结构。你的代码应该清晰,你的意图在阅读时应该很明显。

如果您关心性能,您可能应该将数据存储在List中。Dictionary有很多内部开销。内存和CPU。

如果您只关心的可读性,请选择最能捕获您意图的数据结构。如果要存储键值对(例如,bug跟踪问题中的自定义字段),则使用Dictionary。如果您只是存储没有某种逻辑键的项,请使用List。 创建一个自定义类作为List中的项只需要很少的工作。使用Dictionary只是因为它为每个项目提供了Key属性,这是对该数据结构的误用。创建具有Key属性的自定义类很容易。

在MyType包含所有值的地方使用List<MyType>

字典方法的问题在于它不够灵活。如果以后决定添加中间名,则需要重新设计整个数据结构,而不仅仅是在MyType中添加另一个字段。

相关文章: