当我不需要快速访问其值时,可以使用词典吗?

jal*_*mes 7 c# dictionary

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

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

总而言之,当我不需要使用字典提供的特殊功能时,我应该怎么做,只需使用它来存储具有两个属性的东西:

  • 用一个 Dictionary<,>
  • 用一个 List<KeyValuePair<,>
  • 使用List<MyType>MyType被包含的两个属性和构造函数的自定义类.

Luc*_*ski 19

不要使用字典.

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

这里的原因是:这将是很多更容易阅读你的代码,如果你使用正确的数据结构.使用字典只会使读者感到困惑,并且在重复键显示的那天你会遇到问题.

如果有人读取您的代码并看到Dictionary正在使用的代码,他会认为您真的想要使用类似地图的结构.您的代码应该清晰,阅读时您的意图应该是明显的.

  • +1,你说我要说的任何内容..我强烈建议创建一个具有有意义名称和自解释属性名称的新类.对于'Tuple``Part1`并且'Item2`并没有说很多关于它们的内容,请说不. (2认同)

usr*_*usr 6

如果你关心性能,你应该将数据存储在一个List.A Dictionary有很多内部开销.既有内存也有CPU.

如果您只关心可读性,请选择最能捕捉您意图的数据结构.如果要存储键值对(例如,错误跟踪器问题中的自定义字段),请使用a Dictionary.如果您只是在没有某种逻辑键的情况下存储项目,请使用List.

创建自定义类以用作项目中的项目几乎不需要任何工作List.使用Dictionaryjust只是因为它Key为每个项目提供了一个属性是滥用该数据结构.创建一个也具有Key属性的自定义类很容易.