如何从NSSet实例中检索随机对象?

Bil*_*ell 7 objective-c ios

我可以通过检索随机索引从类似数组的结构中获取随机值.

如何从存储NSNumber对象的NSSet对象中获取随机值?我找不到NSSet的实例方法来检索随机值.

bbu*_*bum 5

简而言之,您无法直接从中检索随机对象NSSet.

您需要将集合转换为数组 - 具有可随机化的索引 - 通过重新设计代码以使用数组,或者您可以使用以下伪代码实现此操作:

randomIndex = ...random-generator....(0 .. [set count]);
__block currentIndex = 0;
__block selectedObj = nil;
[set enumerateObjectsWithOptions:^(id obj, BOOL *stop) {
    if (randomIndex == currentIndex) { selectedObj = obj; *stop = YES }
    else currentIndex++;
 }];
 return selectedObj;
Run Code Online (Sandbox Code Playgroud)

是的 - 它在抓取对象时迭代集合,可能是整个集合.但是,该迭代几乎就是在转换为NSArray时会发生的事情.只要集是没有那么大,你是不是调用它是经常,没什么大不了的.