我得到了一个NSMutableArray,其中包含的对象数量相当少,从1到20不等。
当用户点击按钮时,我想选择一个随机对象并显示它。我试过改组阵列:
srandom(time(NULL));
for (NSInteger x = 0; x < [array count]; x++) {
NSInteger randInt = (random() % ([array count] - x)) + x;
[array exchangeObjectAtIndex:x withObjectAtIndex:randInt];
}
然后使用arc4random()选择一个随机索引,但我得到了很多重复。 我不想删除ObjectAtIndex,因为这只会将我的数组减少到零,然后崩溃。 有没有办法重新填充具有相同对象的数组一旦达到零并重新开始?
由于
答案 0 :(得分:0)
如果您只需要选择一个随机对象,则可以使用以下内容。它比实际改组阵列更有效率。
uint32_t rnd = arc4random_uniform([array count]);
MyObject *randomObject = [array objectAtIndex:rnd];
来自this answer的Adam。
答案 1 :(得分:0)
我设法通过执行以下操作来“解决”我的问题: 它可能很乱,但我想对此有所了解。
NSUInteger randomIndex = arc4random()% [_someArray count];
if (array.count == 0) { //check if array is empty and add the randomIndex
[array addObject:@(randomIndex)];
randomTitle = [[_someArray objectAtIndex:randomIndex] myText];
// NSLog(@"array is empty");
// NSLog(@"my array content %@", array);
}
else if (array.count > 0 && array.count < _someArray.count) {//check if array has already an object and check if this is unique and add it to the array. if not run the loop again.
NSLog(@"array is betwen 0 and _someArray.count");
if([array indexOfObject:@(randomIndex)] == NSNotFound) {
[array addObject:@(randomIndex)];
randomTitle = [[_someArray objectAtIndex:randomIndex] myText];
// NSLog(@"unique number in array");
}
else {
[self loopBackTheAction];
// NSLog(@"number is alreday in array");
}
}
else if (array.count == _someArray.count) {//check if the array is full and empty it. run the loop again.
[array removeAllObjects];
[self loopBackTheAction];
// NSLog(@"array is full running again the loop");
}