如何从NSDictionary中选择随机密钥?

时间:2009-07-10 22:18:42

标签: random nsarray element nsdictionary

当我使用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:的东西。那我该怎么做呢?

2 个答案:

答案 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。希望这可以帮助。