Comment récupérer nème élément dans le dictionnaire? [dupliquer]

possibilité de duplication:

Comment puis-je obtenir le nième élément d'un dictionnaire?

S'il y a un Dictionary avec un total de Y articles et nous avons besoin de N e article quand N < Y alors comment y arriver?

exemple:

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);

comment écrire GetNthItem() ?

0
demandé sur Community 2011-06-17 14:37:30

4 réponses

Le dictionnaire

n'est pas commandé. Il n'est pas n-ième élément.

used Ordereddiction and Item ()

2
répondu vipw 2011-06-17 10:40:09

A Dictionary<K,V> n'a pas d'ordre intrinsèque, donc il n'y a vraiment pas de concept comme le Nth item:

aux fins d'énumération, chaque élément dans le dictionnaire est traité comme un KeyValuePair<TKey, TValue> structure représentant une valeur et sa clé. Le l'ordre dans lequel les articles sont retournés n'est pas défini.

cela dit, si vous voulez juste l'article que se trouve arbitrairement à la position N en ce moment alors vous pouvez utiliser ElementAt :

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

(notez qu'il n'y a aucune garantie que le même article sera trouvé dans la même position si vous exécutez le même code à nouveau, ou même si vous appelez ElementAt deux fois en succession rapide.)

3
répondu LukeH 2011-06-17 10:51:53

utilisant 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();

vous pouvez utiliser FirstOrDefault au lieu de First , selon ce que vous savez sur vos données.

aussi, soyez conscient que si le dictionnaire a besoin d'une commande pour ses articles (sinon il ne serait pas en mesure d'itérer au-dessus d'eux), cette commande est un simple FIFO (il ne pourrait pas être facilement n'importe quoi d'autre, puisque IDictionary ne nécessite pas vos articles pour être IComparable ).

1
répondu Jon 2011-06-17 10:39:27

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

cependant, soyez conscient qu'un dictionnaire n'est pas trié. Selon vos besoins, vous pouvez utiliser un SortedDictionary .

0
répondu George Duckett 2011-06-17 10:39:24