Когда я с помощью NSArray, это было легко:Как выбрать случайный ключ из 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;
мне нужно следить за LastIndex, потому что я хочу, ощущение случайности. То есть, я не хочу получать один и тот же элемент дважды подряд. Поэтому это не должно быть «истинной» случайностью.
Из чего я могу судить, NSDictionary не имеет чего-то вроде -объектаAtIndex :. Итак, как я могу это сделать?
Это NSDictionary (не NSMutableDictionary), поэтому он не будет расти. Он будет явно создан при запуске приложения, используя [[NSDictionary alloc] initWithObjectsAndKeys: ..., nil]; – Elliot
Это работает. То, что я сделал, это вызвать allKeys один раз и сохранить его в новом NSARray ivar. Странно, что allKeys не гарантирует возврата ключей в том же порядке, даже если NSDictionary не изменился. Надеюсь, нет никаких проблем с указанием NSArray * на его возвращаемое значение. – Elliot
Я не вижу ничего плохого, держась за возвращаемое значение allKeys в вашем случае. Выделяется новый массив, поэтому результат не указывает непосредственно на внутреннюю структуру данных. –