NSDictionary allKeys - Gibt es immer die gleiche Reihenfolge?

8

Ich bin ziemlich neu in Objective-C und habe heute mit NSDictionaries gearbeitet und bin auf die allKeys-Methode gestoßen. Wie ich es verstehe, gibt es ein NSArray zurück, das die Schlüssel für das Wörterbuch in zufälliger Reihenfolge enthält. Aber ist diese Reihenfolge immer gleich? dh, wenn ich alle Keys 20 Mal hintereinander im selben Wörterbuch anrufe, bekomme ich garantiert die gleiche Reihenfolge der Ergebnisse?

Danke,

    
KerrM 05.03.2012, 22:58
quelle

3 Antworten

8

Wenn Sie die Methode 20 mal nacheinander in einem Wörterbuch aufrufen, das nicht mutiert wird , wird am wahrscheinlichsten die gleiche Reihenfolge zurückgeben. Das heißt, ich rate Ihnen dringend davon ab, sich darauf zu verlassen, da es stark von Einzelheiten der Implementierung abhängt. Der einzige Grund, warum ich sage, dass es wahrscheinlich die gleiche Reihenfolge zurückgibt, liegt darin, dass der Zugriff auf ein Wörterbuch keine internen Strukturen mutieren und in Ermangelung einer Mutation der einzige andere Weg sein könnte, einen anderen zu erhalten Ordnung wäre, explizit Nichtdeterminismus einzuführen, dh sich auf den globalen Zustand wie einen Zufallszahlengenerator oder die CPU-Uhr zu verlassen, und ich finde es extrem zweifelhaft, dass NSDictionary dies tut.

Wenn Sie die gleiche Reihenfolge der Schlüssel sicherstellen müssen, sollten Sie sie nur sortieren, sobald Sie sie aus dem Wörterbuch abgerufen haben.

    
Kevin Ballard 05.03.2012, 23:03
quelle
1

NSDictionary-Objekte sind ungeordnet, um die Leistung aufrechtzuerhalten.

Wenn Sie ein geordnetes Wörterbuch benötigen, schauen Sie sich dieses Projekt an:

Ссылка

    
peterept 05.03.2012 23:03
quelle
0

Um das herauszufinden, müssen Sie ein schnelles Testprogramm schreiben. Sie sollten sich niemals auf nicht garantierte, nicht dokumentierte Ergebnisse wie diese verlassen. Es ist eine schlechte Programmierpraxis, und es ist sehr wahrscheinlich, dass es mit einer neuen OS-Version bricht.

Wenn Sie die Schlüssel, die zurückkommen sollen, in einer bestimmten Reihenfolge benötigen, sollten Sie sie sortieren, nachdem Sie sie abgerufen haben. Sie können dies mit der Methodengruppe -[NSArray sortedArrayUsing...] tun.

    
Andrew Madsen 05.03.2012 23:03
quelle