create array of random numbers in swift

In Swift 4.2 there is a new static method for fixed width integers that makes the syntax more user friendly:

func makeList(_ n: Int) -> [Int] {
    return (0..<n).map { _ in .random(in: 1...20) }
}

Edit/update: Swift 5.1 or later

We can also extend Range and ClosedRange and create a method to return n random elements:

extension RangeExpression where Bound: FixedWidthInteger {
    func randomElements(_ n: Int) -> [Bound] {
        precondition(n > 0)
        switch self {
        case let range as Range<Bound>: return (0..<n).map { _ in .random(in: range) }
        case let range as ClosedRange<Bound>: return (0..<n).map { _ in .random(in: range) }
        default: return []
        }
    }
}

extension Range where Bound: FixedWidthInteger {
    var randomElement: Bound { .random(in: self) }
}

extension ClosedRange where Bound: FixedWidthInteger {
    var randomElement: Bound { .random(in: self) }
}

Usage:

let randomElements = (1...20).randomElements(5)  // [17, 16, 2, 15, 12]
randomElements.sorted() // [2, 12, 15, 16, 17]

let randomElement = (1...20).randomElement   // 4 (note that the computed property returns a non-optional instead of the default method which returns an optional)

let randomElements = (0..<2).randomElements(5)  // [1, 0, 1, 1, 1]
let randomElement = (0..<2).randomElement   // 0

Note: for Swift 3, 4 and 4.1 and earlier click here.


Ok, this is copy/paste of a question asked elsewhere, but I think I'll try to remember that one-liner :

var randomArray = map(1...100){_ in arc4random()}

(I love it !)

EDIT

If you need a random number with an upperBound (exclusive), use arc4random_uniform(upperBound)

e.g. : random number between 0 & 99 : arc4random_uniform(100)

Swift 2 update

var randomArray = (1...100).map{_ in arc4random()}

Swift 5

This creates an array of size 5, and whose elements range from 1 to 10 inclusive.

let arr = (1...5).map( {_ in Int.random(in: 1...10)} )