Boucle à travers le Système.Les Collections.Génériques.Dictionnaire par de déclaration
J'ai une question rapide. Est-il moyen de facile boucle à travers System.Collections.Generic.Dictionary
via for
déclaration en C#?
Merci d'avance.
- Qu'essayez-vous de faire? Vous êtes à la recherche pour une Valeur spécifique ou KeyValue paire?
- Je suppose que vous voulez dire foreach plutôt que pour?
Vous devez vous connecter pour publier un commentaire.
Pas, d'une manière raisonnable, non. Vous pourrait utiliser l'extension Linq
ElementAt
:...mais je ne vois vraiment pas le point. Juste l'utilisation de l'
foreach
approche. Si vous pour une raison quelconque besoin de garder une trace d'un index lors de l'itération, vous pouvez le faire "à côté":Vous pouvez utiliser foreach:
foreach
.Il existe plusieurs façons.
En parcourant les touches:
boucle sur les valeurs:
boucle par paires:
Non,
for
est surtout pour les collections avec des indices.Vous pouvez
foreach
plus facilement, cependant.Si vous utilisez Net 3.5 ou plus, alors vous pouvez utiliser LINQ et un predecate pour localiser une Valeur spécifique ou de Valeurs.
Les dictionnaires ne sont pas nécessairement stocker leurs KeyValue paires dans l'ordre (par ordre d'entrée ni de Clé).
Philippe a pour
foreach
, bien que j'ai l'habitude de le simplifier pour:Il n'y a aucun moyen de la boucle au travers de cette collection de paires clé-valeur à l'aide d'un
for
boucle parce qu'ils ne sont pas stockées dans l'ordre. Vous pouvez faire une boucle à travers les touches ou les valeurs comme des collections bien.var
mot-clé est absolument essentiel dans tout cas où vous utilisez les types anonymes. Aussi, dans ce cas, le demandeur n'a pas à spécifier les types génériques sur le dictionnaire et je trouve (dans le monde réel) que, parfois, vous avez besoin de changer les types. Mon utilisation devar
fait le type exact du dictionnaire de la pertinence et de l'est du code qui fonctionne indépendamment des types génériques. Il y a beaucoup d'endroits que je ne la laisserais pas unvar
par le biais d'un code d'examen, mais dans un exemple extrait de c'est la fin.Il peut ofc être fait, mais il est un peu idiot de l'OMI
la seule chose acquise par là, c'est une (assez inutile) de l'indice, et si c'est le réel objectif, vous êtes mieux servi par quelque chose comme ceci:
Vous pouvez faire une boucle sur les touches
ou les valeurs
Ou les deux, comme Philippe montre
Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.Dictionary<TKey,TValue>KeyCollection'
Count
, en essayant d'accéder à des éléments de laKeys
collection par index (Keys[i]
) sera toujours casser le build (qui était l'erreur que je faisais référence dans mon commentaire).Si elle n'a pas à être "pour"en boucle, peut-être à l'aide de la De dictionnaire.Méthode GetEnumerator avec un "tout"en boucle est une option - il est assez facile ainsi à mon humble avis:
code-extrait de C# Dictionnaire GetEnumerator
foreach
? Aussi, vous n'êtes pas à l'élimination de la enumeartor.foreach
, c'est exactement ce qu'est unforeach
va faire.foreach
est juste sucre syntaxique pour ça (sauf queforeach
t-il correctement, à la différence de votre code). Unforeach
sera pas plus lent; c'est faire la même chose.