Quand j'utilisais un NSArray, il était facile:Comment sélectionner une clé aléatoire dans un NSDictionary?
NSArray *array = ...
lastIndex = INT_MAX;
...
int randomIndex;
do {
randomIndex = RANDOM_INT(0, [array count] - 1);
} while (randomIndex == lastIndex);
NSLog(@"%@", [array objectAtIndex:randomIndex]);
lastIndex = randomIndex;
J'ai besoin de garder une trace du lastIndex parce que je veux le sentiment de hasard. C'est-à-dire que je ne veux pas avoir le même élément deux fois de suite. Cela ne devrait donc pas être un "vrai" caractère aléatoire. De ce que je peux dire, NSDictionary n'a pas quelque chose comme -objectAtIndex :. Alors, comment puis-je accomplir cela?
C'est un NSDictionary (pas un NSMutableDictionary), donc ça ne va pas se développer. Il sera explicitement créé au lancement de l'application, en utilisant [[NSDictionary alloc] initWithObjectsAndKeys: ..., nil]; – Elliot
Cela fonctionne. Ce que j'ai fait, c'est appeler tous les Keys une fois et le stocker dans un nouvel ivar NSArray. Il est étrange que tous les clés ne soient pas garanties de toujours retourner les clés dans le même ordre, même si le NSDictionary est inchangé. Heureusement, il n'y a aucun problème à pointer un NSArray * à sa valeur de retour, cependant. – Elliot
Je ne vois rien de mal à conserver la valeur de retour allKeys dans votre cas. Un nouveau tableau est alloué, de sorte que le résultat ne pointe pas directement vers une structure de données interne. –