我可以通过检索随机索引从类似数组的结构中获取随机值。
如何从存储NSNumber对象的NSSet对象中获取随机值?我找不到NSSet的实例方法来检索随机值。
答案 0 :(得分: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;
是 - 它在抓取对象时迭代集合,可能是整个集合。但是,该迭代几乎就是在转换为NSArray时会发生的事情。只要这个集合不是那么大而且你不经常把它称为那个,没什么大不了的。
答案 1 :(得分:4)
虽然我喜欢@bbum答案会在某些情况下提前终止,因为在枚举块中使用了stop
。
为了便于阅读和记忆将来重新访问此代码时发生的事情,我将首先提出turn the set into an array
NSInteger randomIndex = ..random-generator....(0 .. [set count])
id obj = [set count] > 0 ? [[set allObjects] objectAtIndex:randomIndex] : nil;