1

我需要存储一个键值对列表,并要求保留添加项目的顺序intstring一旦初始化,它就不会改变,即没有添加或删除任何内容。

起初我想到了使用Dictionary<int,string>,每次我需要访问使用的项目时

foreach(var entry in dict.OrderBy(e=>e.Key)) { } //as Key is `int`

然而,每次订购似乎都不是最好的选择。

现在我有了一个想法,即有一个List<Tuple<int, string>>, 以List<T>保证项目的顺序。

那么,有没有更好的选择呢?

4

3 回答 3

4

查看建议的可能性:

  • Dictionary不保证物品的顺序
  • SortedDictionary对项目进行排序,但不是按照您添加它们的顺序(它根据键比较进行排序),
  • OrderedDictionary保持顺序,但它不是通用的,并且会引入不必要的铸造和装箱。

所以我认为你应该使用List<Tuple<int, string>>. foreach它保留了顺序,并且对于迭代使用和索引访问来说已经足够了。如果您事先知道大小,您也可以使用数组或只读集合类型,正如Cuong Le 在他的回答中所建议的那样

于 2013-02-01T07:16:15.857 回答
2

如果允许重复键,List<Tuple<int, string>>将是最佳选择。为了使您的列表为只读,您可以在初始化后公开只读列表:

 var readonlyList = new ReadOnlyCollection<Tuple<int, string>>(yourlist);
于 2013-02-01T07:18:01.047 回答
0

虽然Dictionary看起来适合作为数据结构,但它并不能保证项目的顺序。

列表似乎不合适,因为它不适合您尝试存储的数据结构。

您可以使用OrderedDictionary 保证项目顺序的an 。

foreach (DictionaryEntry entry in orderedDictionary)
{
    //...
}
于 2013-02-01T07:20:18.127 回答