我应该使用哪些泛型

时间:2013-02-01 07:11:42

标签: c# generics

我需要存储int - string键值对的列表,并要求保留添加项目的顺序。初始化后,它不会改变,即没有添加或删除..

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

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

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

现在,只要List<Tuple<int, string>>保证商品的顺序,我就会想到List<T>

那么,有更好的选择吗?

3 个答案:

答案 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)
{
    //...
}