我需要存储int
- string
键值对的列表,并要求保留添加项目的顺序。初始化后,它不会改变,即没有添加或删除..
起初我想过使用Dictionary<int,string>
,每次我需要访问项目时使用
foreach(var entry in dict.OrderBy(e=>e.Key)) { } //as Key is `int`
然而,每次订购似乎都不是最佳选择。
现在,只要List<Tuple<int, string>>
保证商品的顺序,我就会想到List<T>
。
那么,有更好的选择吗?
答案 0 :(得分:4)
看看提议的可能性:
Dictionary
不保证商品的顺序SortedDictionary
按照您添加的顺序对 进行排序(根据密钥比较对其进行排序),OrderedDictionary
保留顺序,但它不是通用的,会引入不必要的投射和装箱。 所以我认为你应该使用List<Tuple<int, string>>
。它保留了顺序,并且使用foreach
和索引访问进行迭代就足够了。如果您事先知道大小,则可以使用数组或只读集合类型Cuong Le suggested in his answer。
答案 1 :(得分:2)
如果您允许重复密钥,List<Tuple<int, string>>
将是最佳选择。为了使您的列表成为只读,您可以在初始化后公开只读列表:
var readonlyList = new ReadOnlyCollection<Tuple<int, string>>(yourlist);
答案 2 :(得分:0)
虽然Dictionary
似乎适合作为数据结构,但它不保证项目的顺序。
列表似乎不合适,因为它不适合您要存储的数据结构。
您可以使用OrderedDictionary
which guarantees the order of items。
foreach (DictionaryEntry entry in orderedDictionary)
{
//...
}