如何在字典中检索第N项?

时间:2011-06-17 10:37:31

标签: c# dictionary collect

  

可能重复:
  How do I get the nth element from a Dictionary?

如果Dictionary总共有Y项,那么N时我们需要N项。 Y然后如何实现这个目标?

示例:

Dictionary<int, string> items = new Dictionary<int, string>();

items.add(2, "Bob");
items.add(5, "Joe");
items.add(9, "Eve");

// We have 3 items in the dictionary.
// How to retrieve the second one without knowing the Key?

string item = GetNthItem(items, 2);

如何撰写GetNthItem()

4 个答案:

答案 0 :(得分:3)

Dictionary<K,V>没有任何内在的顺序,所以实际上没有第N项这样的概念:

  

For purposes of enumeration, each item in the dictionary is treated as a KeyValuePair<TKey, TValue> structure representing a value and its key. The order in which the items are returned is undefined.

话虽如此,如果您只是想在现在找到任意碰巧的项目,那么您可以使用ElementAt

string item = items.ElementAt(2).Value;

(请注意,如果您再次运行相同的代码,或者即使您快速连续两次致电ElementAt,也无法保证在同一位置找到相同的项目。)

答案 1 :(得分:2)

字典未订购。没有第n项。

使用OrderedDictionary和Item()

答案 2 :(得分:1)

使用LINQ:

Dictionary<int, string> items = new Dictionary<int, string>();

items.add(2, "Bob");
items.add(5, "Joe");
items.add(9, "Eve");

string item = items.Items.Skip(1).First();

您可能希望使用FirstOrDefault代替First,具体取决于您对数据的了解程度。

另外,请注意,虽然字典确实需要对其项目进行排序(否则它将无法迭代它们),但该排序是一个简单的FIFO(它不可能是其他任何东西,因为{{ 1}}不要求您的商品为IDictionary)。

答案 3 :(得分:0)

string item = items[items.Keys[1]];

但是,请注意字典未排序。根据您的要求,您可以使用SortedDictionary