C# 如何从具有索引的Dictionary对象中获取局部项?

C# 如何从具有索引的Dictionary对象中获取局部项?,c#,C#,如何使用索引从字典对象检索项?例如,我有一个包含10项的DICITIONY对象,我必须从字典中获取第5个keypairvalue?忽略这个问题所提出的字典的基本滥用: int counter = 0; foreach (var pair in yourDictionary) { if (++counter == 5) { // pair contains your fifth item } } 忽略这个问题所提出的字典的基本滥用: int counter

如何使用索引从字典对象检索项?例如,我有一个包含10项的DICITIONY对象,我必须从字典中获取第5个keypairvalue?

忽略这个问题所提出的字典的基本滥用:

int counter = 0;
foreach (var pair in yourDictionary)
{
    if (++counter == 5)
    {
        // pair contains your fifth item
    }
}

忽略这个问题所提出的字典的基本滥用:

int counter = 0;
foreach (var pair in yourDictionary)
{
    if (++counter == 5)
    {
        // pair contains your fifth item
    }
}

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

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

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

如果您使用这样的通用字典:

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

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

字典是无序的。如果您的意思是“添加到词典中的第五项”-它们不提供此功能

需要注意的一点是,在许多情况下,
Dictionary
似乎是有序的-如果您只添加一组条目,然后进行迭代,那么在当前的实现中,我相信您至少通常会以相同的顺序返回对。然而,这并不能保证,也不是特别要发生的——这只是实现的一个怪癖。如果删除条目,然后添加更多条目,那么整个过程就会变成梨形


基本上,如果您想要排序和键查找,您需要存储一个列表和一个字典。

字典是无序的。如果您的意思是“添加到词典中的第五项”-它们不提供此功能

需要注意的一点是,在许多情况下,
Dictionary
似乎是有序的-如果您只添加一组条目,然后进行迭代,那么在当前的实现中,我相信您至少通常会以相同的顺序返回对。然而,这并不能保证,也不是特别要发生的——这只是实现的一个怪癖。如果删除条目,然后添加更多条目,那么整个过程就会变成梨形


基本上,如果您想要排序和键查找,您需要存储一个列表和一个字典。

第五个根据哪个排序?
字典
类不保证任何特定的顺序。如果您希望它以某种特定的顺序排列,请从集合中检索对(如John所建议的),并对它们进行排序,然后在您需要的索引处获取
KeyValuePair
。如果需要按插入顺序对其排序,请尝试改用
System.Collections.Specialized.OrderedDictionary
,然后您可以直接按索引访问
KeyValuePair

根据哪个顺序排列第五个?
字典
类不保证任何特定的顺序。如果您希望它以某种特定的顺序排列,请从集合中检索对(如John所建议的),并对它们进行排序,然后在您需要的索引处获取
KeyValuePair
。如果需要按插入顺序对其排序,请尝试改用
System.Collections.Specialized.OrderedDictionary
,然后可以直接按索引访问
KeyValuePair

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

var-keyValuePair=d.ElementAt(4)

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

IDictionary接口允许枚举包含的键和值,但并不意味着任何特定的排序顺序

这意味着返回的元素可能与插入它的顺序不一致,因此可能不是您所期望的

System.Collections.Specialized
中有一个类,用于强制排序并允许您通过项目索引器按索引进行访问。但是,这是在泛型之前的日子,因此它只接受
对象
键值,因此不像泛型集合那样友好


我刚刚在CodeProject上找到了一个实现通用OrderedDictionary的。我从未使用过此功能,但它可能对您有用。

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

var-keyValuePair=d.ElementAt(4)

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

IDictionary接口允许枚举包含的键和值,但并不意味着任何特定的排序顺序

这意味着返回的元素可能与插入它的顺序不一致,因此可能不是您所期望的

System.Collections.Specialized
中有一个类,用于强制排序并允许您通过项目索引器按索引进行访问。但是,这是在泛型之前的日子,因此它只接受
对象
键值,因此不像泛型集合那样友好

我刚刚在CodeProject上找到了一个实现通用OrderedDictionary的。我从未使用过这个,但它可能对您有用。

使用System.Linq

字符串项=dicOBj.Keys.ElementAt(索引)

您可以通过指定索引的相同方式获取键和值

使用System.Linq

字符串项=dicOBj.Keys.ElementAt(索引)


您可以通过指定索引的相同方式获取键和值。NET Framework有8个字典类:dictionary、Hastable、ListDictionary、OrderedDictionary、SortedDictionary、SortedList、SortedList Generic。在所有这些类中,项目都可以通过键检索,但项目只能通过索引检索,顺序为Dictionary、SortedList、SortedList Generic。如果需要按键或索引从词典中检索条目,则必须使用以下类别之一:OrderedDictionary、SortedList、SortedList Generic。 如何使用这些类,您可以