8
votes

Boucle via System.Collections.Generic.dictionary via pour la déclaration

J'ai une question rapide. Y a-t-il un moyen de faire une boucle facile via system.collections.generic.dictionary via pour instruction en c #?

Merci d'avance.


2 commentaires

Qu'essayez-vous de faire? Vous recherchez une paire de valeur ou de keyvalue spécifique?


Je suppose que vous voulez dire pour acheter plutôt que pour?


9 Réponses :


12
votes

Vous pouvez utiliser Foreach:

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

// ...

foreach (KeyValuePair<string,string> kv in dictionary) 
{
    string key = kv.Key;
    string value = kv.Value;
}


1 commentaires

En effet, il a été fixé entre-temps



0
votes

Non, pour est principalement destiné aux collections avec des indices. Vous pouvez foreach dessus facilement, cependant.


0 commentaires

-1
votes

Vous pouvez boucler sur les touches xxx

ou les valeurs xxx

ou les deux comme philippe montre >


3 commentaires

Cela ne compilera pas ne peut pas appliquer indexation avec [] à une expression de type 'system.collections.generic.dictionary keycollec tion'


Il cherchait: compter au lieu de la longueur, qui ne s'applique qu'aux tableaux «normaux»


@Oxymoron: Même lorsque vous utilisez Nombre , essayez d'accéder aux éléments dans la collection Collection par index ( [I] ) brisera toujours la construction (Quelle était l'erreur que je faisais appelé dans mon commentaire).



0
votes

Si vous utilisez NET 3.5 ou version ultérieure, vous pouvez utiliser LINQ et un Prédecate pour localiser une valeur ou des valeurs spécifiques. Les dictionnaires ne stockent pas nécessairement leurs paires keyvalue dans l'ordre (soit par ordre d'entrée ni ordre clé).


0 commentaires

3
votes

Il y a plusieurs façons. Boucle via les touches: xxx

boucle via des valeurs: xxx

boucle via des paires: xxx


0 commentaires

0
votes

Philippe's a eu pour foreach code>, bien que je le simplifie habituellement:

foreach (var pair in dictionary) 
{
    var key = pair.Key;
    var value = pair.Value;
}


2 commentaires

L'utilisation de «var» est terriblement mauvaise pratique en général.


@Nyerguds C'est une déclaration terriblement balancée et objective. Il est également incorrect - le mot clé var est absolument essentiel dans toutes les circonstances où vous utilisez des types anonymes. En outre, dans ce cas, l'astucieux n'a pas spécifié les types génériques sur le dictionnaire et je trouve (dans le monde réel) que vous devez parfois modifier les types. Mon utilisation de var rend le type exact du dictionnaire sans importance et est le code qui fonctionne indépendamment des types génériques. Il y a beaucoup d'endroits où je ne laisserais pas un var via une critique de code, mais dans un exemple d'extrait, c'est bien.



7
votes

pas de manière raisonnable, non. Vous pourrait utiliser l'extension LINQ ellementat : xxx

... mais je ne vois vraiment pas le point. Il suffit d'utiliser l'approche de régulier . Si vous avez besoin de suivre une trace d'un index tout en itération, vous pouvez le faire "sur le côté": xxx


0 commentaires

0
votes

Cela peut être fait, mais c'est un peu stupide imo xxx

la seule chose gagnée par ceci est un index (assez inutile), et si c'est l'objectif réel, vous sont mieux servis par quelque chose comme ceci: xxx


0 commentaires

0
votes

S'il ne doit pas nécessairement être un "pour" -Loop, peut-être utiliser le Dictionary.getenumerator Methode avec un" tandis que "-Loop est une option - il est assez facile iMho : xxx

Code-Snippet de C # Dictionnaire Getenumerator


3 commentaires

Pourquoi feriez-vous cela en utilisant un foreach ? En outre, vous ne disposez pas de l'énumeur.


Le code-snippet provient de dotnetperls.com/dictionary-getenumerator , ce n'est pas mon code. Et selon ce site Web, l'utilisation de l'énumérateur a une meilleure performance que 'foreach' - c'est pourquoi je pense que cela vaut la peine de mentionner l'énumérateur


Peu importe si c'est votre code ou non. Ce n'est pas un bon code et vous devriez le réparer ou ne pas l'utiliser. Il est important de disposer de l'énumérateur; Si vous voulez énumérer explicitement, vous devez le faire. Quant au mieux qu'un foreach , c'est exactement ce qu'est un foreach va faire. foreach est juste du sucre syntaxique pour cela (sauf que foreach le fait-il correctement, contrairement à votre code). Un foreach ne sera pas plus lent; ça fait la même chose.