3303 Stimmen

Wie kann man über ein Wörterbuch iterieren?

Ich habe ein paar verschiedene Möglichkeiten, über ein Wörterbuch in C# zu iterieren gesehen. Gibt es eine Standardmethode?

92 Stimmen

@VikasGupta Was würden Sie vorschlagen, um etwas mit einer Sammlung von Schlüssel-Wert-Paaren zu tun, wenn Sie nicht wissen, wie die Schlüssel lauten werden?

11 Stimmen

@nasch: myDictionary.Keys erhalten Sie eine Sammlung, die die Schlüssel in myDictionary .

33 Stimmen

@displayName Wenn Sie etwas mit jedem Schlüssel-Wert-Paar machen wollen, aber keinen Verweis auf die Schlüssel haben, um die Werte nachzuschlagen, würden Sie über das Wörterbuch iterieren, richtig? Ich wollte nur darauf hinweisen, dass es Fälle geben kann, in denen man das tun möchte, obwohl Vikas behauptet, dass dies in der Regel eine falsche Verwendung ist.

12voto

Ron Punkte 1779

Einfachste Form, ein Wörterbuch zu iterieren:

foreach(var item in myDictionary)
{ 
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
}

9voto

Ich habe diese Methode in der Dokumentation für die DictionaryBase-Klasse auf MSDN gefunden:

foreach (DictionaryEntry de in myDictionary)
{
     //Do some stuff with de.Value or de.Key
}

Dies war die einzige, die ich in einer Klasse, die von der DictionaryBase geerbt hat, richtig zum Laufen bringen konnte.

8voto

ender Punkte 470

Wenn Sie nur eine Aufzählung der Werte benötigen, können Sie die Wertesammlung des Wörterbuchs verwenden:

foreach(var value in dictionary.Values)
{
    // do something with entry.Value only
}

In diesem Beitrag wird berichtet, dass dies die schnellste Methode ist: http://alexpinsker.blogspot.hk/2010/02/c-fastest-way-to-iterate-over.html

7voto

boca Punkte 2272

Ich weiß, dies ist eine sehr alte Frage, aber ich habe einige Erweiterungsmethoden erstellt, die nützlich sein könnten:

    public static void ForEach<T, U>(this Dictionary<T, U> d, Action<KeyValuePair<T, U>> a)
    {
        foreach (KeyValuePair<T, U> p in d) { a(p); }
    }

    public static void ForEach<T, U>(this Dictionary<T, U>.KeyCollection k, Action<T> a)
    {
        foreach (T t in k) { a(t); }
    }

    public static void ForEach<T, U>(this Dictionary<T, U>.ValueCollection v, Action<U> a)
    {
        foreach (U u in v) { a(u); }
    }

Auf diese Weise kann ich Code wie diesen schreiben:

myDictionary.ForEach(pair => Console.Write($"key: {pair.Key}, value: {pair.Value}"));
myDictionary.Keys.ForEach(key => Console.Write(key););
myDictionary.Values.ForEach(value => Console.Write(value););

6voto

Seçkin Durgay Punkte 2632

Wenn Sie eine for-Schleife verwenden möchten, können Sie dies tun:

var keyList=new List<string>(dictionary.Keys);
for (int i = 0; i < keyList.Count; i++)
{
   var key= keyList[i];
   var value = dictionary[key];
 }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X