Скажите, что у меня есть массив с объектами, 1, 2, 3 и 4. Как я выбрал бы случайный объект от этого массива?
Ответ @Darryl правильный, но можно было бы внести небольшие изменения:
NSUInteger randomIndex = arc4random() % theArray.count;
Изменения:
arc4random()
вместо rand()
и random()
проще, поскольку не требует посева (вызов srand()
или srandom()
). %
) делает общий оператор короче, а также делает его семантически более ясным. Возможно что-то вроде:
NSUInteger randomIndex = (NSUInteger)floor(random()/RAND_MAX * [theArray count]);
Не забудьте инициализировать генератор случайных чисел (например, srandomdev ()).
ПРИМЕЧАНИЕ. Я обновился, чтобы использовать -count вместо синтаксиса точки, согласно ответу ниже.
Сгенерировать случайное число и использовать его в качестве индекса. Пример:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *array = [NSArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSUInteger randomNumber;
int fd = open("/dev/random", O_RDONLY);
if (fd != -1) {
read(fd, &randomNumber, sizeof(randomNumber));
close(fd);
} else {
fprintf(stderr, "Unable to open /dev/random: %s\n", strerror(errno));
return -1;
}
double scaledRandomNumber = ((double)randomNumber)/NSUIntegerMax * [array count];
NSUInteger randomIndex = (NSUInteger)floor(scaledRandomNumber);
NSLog(@"random element: %@", [array objectAtIndex: randomIndex]);
}
return 0;
}