Say I have an array with objects, 1, 2, 3 and 4. How would I pick a random object from this array?
Say I have an array with objects, 1, 2, 3 and 4. How would I pick a random object from this array?
This is the simplest solution I could come up with:
id object = array.count == 0 ? nil : array[arc4random_uniform(array.count)];
It's necessary to check count because a non-nil but empty NSArray will return 0 for count, and arc4random_uniform(0) returns 0. So without the check, you'll go out of bounds on the array.
This solution is tempting but is wrong because it will cause a crash with an empty array:
id object = array[arc4random_uniform(array.count)];
For reference, here's the documentation:
u_int32_t
arc4random_uniform(u_int32_t upper_bound);
arc4random_uniform() will return a uniformly distributed random number less than upper_bound.
The man page doesn't mention that arc4random_uniform returns 0 when 0 is passed as upper_bound.
Also, arc4random_uniform is defined in <stdlib.h>, but adding the #import wasn't necessary in my iOS test program.
In Swift 4:
let array = ["one","two","three","four"]
let randomNumber = arc4random_uniform(UInt32(array.count))
array[Int(randomNumber)]