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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top