我应该使用哪些泛型
本文关键字:泛型 我应该 | 更新日期: 2023-09-27 17:56:51
我需要存储int
- string
键值对的列表,并要求保留添加项目的顺序。一旦初始化,它就不会改变,即没有添加或删除任何内容。
起初我想使用Dictionary<int,string>
,每次我需要访问项目时都使用
foreach(var entry in dict.OrderBy(e=>e.Key)) { } //as Key is `int`
但是,每次订购似乎都不是最佳选择。
现在我想到了一个主意,只要List<T>
保证项目的顺序,就有一个List<Tuple<int, string>>
。
那么,有没有更好的选择呢?
看看提出的可能性:
-
Dictionary
不保证项目的顺序 -
SortedDictionary
对项目进行排序,但不按您添加它们的顺序排序(它根据键比较进行排序), -
OrderedDictionary
保持秩序,但它不是通用的,会引入不必要的铸造和拳击。
所以我认为你应该使用List<Tuple<int, string>>
.它保留了顺序,并且足以使用foreach
和索引访问进行迭代。如果你事先知道大小,你也可以使用数组,或者只读集合类型,正如Cuong Le在他的回答中建议的那样。
如果允许重复键,List<Tuple<int, string>>
将是最佳选择。为了使您的列表成为只读,您可以在初始化后公开只读列表:
var readonlyList = new ReadOnlyCollection<Tuple<int, string>>(yourlist);
尽管Dictionary
似乎适合作为数据结构,但它不能保证项目的顺序。
列表似乎不正确,因为它不适合您尝试存储的数据结构。
您可以使用保证项目顺序的OrderedDictionary
。
foreach (DictionaryEntry entry in orderedDictionary)
{
//...
}