Wie wähle ich einen zufälligen Schlüssel von einem NSDictionary?
-
12-09-2019 - |
Frage
Wenn ich eine NSArray benutzte, war es einfach:
NSArray *array = ...
lastIndex = INT_MAX;
...
int randomIndex;
do {
randomIndex = RANDOM_INT(0, [array count] - 1);
} while (randomIndex == lastIndex);
NSLog(@"%@", [array objectAtIndex:randomIndex]);
lastIndex = randomIndex;
Ich brauche Spur des liest zu halten, weil ich das Gefühl der Zufälligkeit will. Das heißt, ich will nicht das gleiche Element zweimal in einer Reihe bekommen. So soll es nicht "true" Zufälligkeit sein.
Von dem, was ich sagen kann, NSDictionary hat nicht so etwas wie -objectAtIndex :. Also, wie kann ich das erreichen?
Lösung
Sie können eine Reihe von Tasten mit AllKeys (undefined Reihenfolge) oder keysSortedByValueUsingSelector (wenn Sie mit dem Wert wollen Sortierung). Eine Sache im Auge (in Bezug auf liest) zu halten ist, dass auch bei Sortierung, kann der gleiche Index auf ein anderes Schlüssel-Wert-Paar beziehen kommen, wie das Wörterbuch wächst.
Jede dieser (vor allem aber keysSortedByValueUsingSelector) wird mit einer Leistungseinbuße.
EDIT:. Da das Wörterbuch nicht wandelbar ist, sollten Sie nur in der Lage sein AllKeys einmal anrufen, und dann nur zufällige Schlüssel aus, dass Pick
Andere Tipps
Sie können den Code verwenden unter:
- (YourObjectType *)getRandomObjectFromDictionary:(NSDictionary *)dictionary
{
NSArray *keys = dictionary.allKeys;
return dictionary[keys[arc4random_uniform((int)keys.count)]];
}
Um es effizienter, Sie keys
in einer Instanzvariablen zwischenspeichern kann. Hoffe das hilft.