web-dev-qa-db-fra.com

Obtenir le premier élément d'un dictionnaire

J'ai la déclaration suivante:

Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();

Je dois obtenir le premier élément, mais je ne connais pas la clé ni la valeur. Quelle est la meilleure façon de faire cela?

34
cdub

Pour tous ceux qui viennent à cela qui veulent un moyen sans linq pour obtenir un élément à partir d'un dictionnaire

var d = new Dictionary<string, string>();
d.Add("a", "b");
var e = d.GetEnumerator();
e.MoveNext();
var anElement = e.Current;
// anElement/e.Current is a KeyValuePair<string,string>
// where Key = "a", Value = "b"

Je ne sais pas si cela dépend de l'implémentation, mais si votre dictionnaire ne contient aucun élément, Current contiendra un KeyValuePair<string, string> où la clé et la valeur sont à la fois null.

(J'ai examiné la logique derrière la méthode First de linq pour le trouver et je l'ai testé via LinqPad 4)

18
JesseBuesking

Bien que vous puissiez utiliser First(), les dictionnaires n’ont pas d’ordre en soi. Veuillez utiliser OrderedDictionary à la place. Et alors vous pouvez faire FirstOrDefault. De cette façon, cela aura un sens.

14
RAS

EDIT: Utilisez un OrderedDictionary.

Il vaut mieux utiliser FirstOrDefault() pour récupérer la première valeur.

Ex:

var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
4
naren.katneni

Le dictionnaire ne définit pas l'ordre des éléments. Si vous avez juste besoin d'un élément, utilisez les propriétés Keys ou Values du dictionnaire pour en choisir un.

2
Alexei Levenkov
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
1
Agustin Meriles

mal trouver un moyen facile de trouver premier élément dans le dictionnaire :)

 Dictionary<string, Dictionary<string, string>> like = 
 newDictionary<string,Dictionary<string, string>>();

 foreach(KeyValuePair<string, Dictionary<string, string>> _element in like)
 {
   Console.WriteLine(_element.Key); // or do something
   break;
 }
0
Levris First