当我不需要快速访问它们的值时,是否可以使用字典?
本文关键字:是否 可以使 字典 不需要 访问 | 更新日期: 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。
Dictionary
。如果您只是存储没有某种逻辑键的项,请使用List
。
创建一个自定义类作为List
中的项只需要很少的工作。使用Dictionary
只是因为它为每个项目提供了Key
属性,这是对该数据结构的误用。创建具有Key
属性的自定义类很容易。
在MyType包含所有值的地方使用List<MyType>
字典方法的问题在于它不够灵活。如果以后决定添加中间名,则需要重新设计整个数据结构,而不仅仅是在MyType中添加另一个字段。