当我使用NSArray时,很容易:
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没有类似-objectAtIndex:的东西。那我该怎么做呢?
答案 0 :(得分:2)
您可以使用allKeys(未定义的顺序)或keysSortedByValueUsingSelector获取一系列键(如果您想按值排序)。 要记住的一件事(关于lastIndex)是即使使用排序,当字典增长时,相同的索引可能会引用不同的键值对。
其中任何一个(但特别是keysSortedByValueUsingSelector)都会带来性能损失。
编辑:由于字典不可变,你应该只能调用allKeys一次,然后从中选择随机密钥。
答案 1 :(得分:1)
您可以使用以下代码:
- (YourObjectType *)getRandomObjectFromDictionary:(NSDictionary *)dictionary
{
NSArray *keys = dictionary.allKeys;
return dictionary[keys[arc4random_uniform((int)keys.count)]];
}
为了提高效率,您可以在实例变量中缓存keys
。希望这可以帮助。