代码之家  ›  专栏  ›  技术社区  ›  Kishore Kumar

如何从具有索引的Dictionary对象中获取particular项?

c#
  •  0
  • Kishore Kumar  · 技术社区  · 14 年前

    如何使用索引从dictionary对象检索项?我有一个包含10个项目的dictiory object,我必须从字典中得到第5个keypairvalue?

    7 回复  |  直到 14 年前
        1
  •  5
  •   Jon Skeet    14 年前

    字典是无序的。如果你的意思是“第五项添加到字典”-他们不提供这个功能。

    Dictionary<TKey, TValue> 出现 按顺序-如果您只是添加一堆条目,然后进行迭代,那么在当前的实现下,我相信您至少会这样做 把这两对按同样的顺序拿回来。然而,这不是保证,不是 这只是实现的一个怪癖。如果你删除条目,然后添加更多,那么整个事情就变成梨形了。

        2
  •  4
  •   David Anderson    14 年前

    如果您使用的是.NET 3.5或更高版本:

    var keyValuePair = d.ElementAt(4);

    但是,这是在幕后使用枚举器,无法保证从字典中对枚举项进行排序:

    (From IDictionary reference on MSDN)

    OrderedDictionary 上课时间 System.Collections.Specialized object 键值,因此不像泛型集合那样友好。

    我刚发现 this article 在实现泛型OrderedDictionary的CodeProject上。我从来没有用过这个,但它可能对你有用。

        3
  •  0
  •   John Rasch    14 年前

    忽略了这个问题所呈现的字典的基本滥用:

    int counter = 0;
    foreach (var pair in yourDictionary)
    {
        if (++counter == 5)
        {
            // pair contains your fifth item
        }
    }
    
        4
  •  0
  •   kdmurray    14 年前

    如果您使用的是这样的通用词典:

    Dicionary<int,string> myDict = new Dictionary<int,string>();
    

    通过将输出转换为列表,可以从字典中提取第5个值:

    string SomeString = myDict.Values.ToList()[4];
    

    但通常,当您更关心基于预先确定的键而不是它在列表中的位置来检索值时,您会使用字典。

        5
  •  0
  •   Peter    14 年前

    Dictionary 类不保证任何特定的顺序。如果您希望它按特定顺序排列,请从集合中检索对(例如 建议)并对它们进行排序,然后获取 KeyValuePair 在你需要的索引上。如果需要按插入顺序排序,请尝试使用 System.Collections.Specialized.OrderedDictionary 键值对 直接按索引。

        6
  •  0
  •   Mothy    12 年前

        7
  •  0
  •   Sharunas Bielskis    10 年前

    .NET Framework有8个字典类:dictionary、Hastable、ListDictionary、OrderedDictionary、SortedDictionary、SortedList、SortedList Generic。在所有这些类中,项都可以通过键检索,但项只能通过索引检索OrderedDictionary、SortedList、SortedList Generic。如果需要按键或索引从词典中检索条目,则必须使用以下类之一:OrderedDictionary、SortedList、SortedList Generic。 如何使用这些类,您可以找到: OrderedDictionary Class SortedList Class