Pick a random element from an array Pick a random element from an array arrays arrays

Pick a random element from an array


Swift 4.2 and above

The new recommended approach is a built-in method on the Collection protocol: randomElement(). It returns an optional to avoid the empty case I assumed against previously.

let array = ["Frodo", "Sam", "Wise", "Gamgee"]print(array.randomElement()!) // Using ! knowing I have array.count > 0

If you don't create the array and aren't guaranteed count > 0, you should do something like:

if let randomElement = array.randomElement() {     print(randomElement)}

Swift 4.1 and below

Just to answer your question, you can do this to achieve random array selection:

let array = ["Frodo", "sam", "wise", "gamgee"]let randomIndex = Int(arc4random_uniform(UInt32(array.count)))print(array[randomIndex])

The castings are ugly, but I believe they're required unless someone else has another way.


Riffing on what Lucas said, you could create an extension to the Array class like this:

extension Array {    func randomItem() -> Element? {        if isEmpty { return nil }        let index = Int(arc4random_uniform(UInt32(self.count)))        return self[index]    }}

For example:

let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16]let myItem = myArray.randomItem() // Note: myItem is an Optional<Int>


Swift 4 version:

extension Collection where Index == Int {    /**     Picks a random element of the collection.     - returns: A random element of the collection.     */    func randomElement() -> Iterator.Element? {        return isEmpty ? nil : self[Int(arc4random_uniform(UInt32(endIndex)))]    }}