簡體   English   中英

在 Swift 中創建一個隨機數數組

[英]Create an array of random numbers in Swift

我剛剛開始學習 Swift。

我正在嘗試創建一個包含多個隨機數的數組,並最終對數組進行排序。 我能夠創建一個包含一個隨機數的數組,但是迭代它以創建一個包含多個隨機數的數組的最佳方法是什么?

func makeList() {
   var randomNums = arc4random_uniform(20) + 1

    let numList = Array(arrayLiteral: randomNums)

}

makeList()

Swift 4.2 中,有一個用於固定寬度整數的新靜態方法,使語法更加用戶友好:

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

編輯/更新: Swift 5.1 或更高版本

我們還可以擴展RangeClosedRange並創建一個方法來返回n隨機元素:

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) }
}

用法:

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

注意:對於Swift 3、4 和 4.1及更早版本,請單擊此處

好的,這是在別處提出的問題的復制/粘貼,但我想我會盡量記住那一行:

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

(我喜歡它!)

如果您需要一個帶有 upperBound(獨占)的隨機數,請使用 arc4random_uniform(upperBound)。

例如:0 到 99 之間的隨機數: arc4random_uniform(100)

斯威夫特 2 更新

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

斯威夫特 5

這將創建一個大小為 5 的數組,其元素范圍為 1 到 10(含)。

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

Swift 4.2 或更高版本

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

let list = makeList(5)  //[11, 17, 20, 8, 3]
list.sorted() // [3, 8, 11, 17, 20]

這個怎么樣? 適用於 Swift 5 和 Swift 4.2

public extension Array where Element == Int {
    static func generateRandom(size: Int) -> [Int] {
        guard size > 0 else {
            return [Int]()
        }
        return Array(0..<size).shuffled()
    }
}

用法:

let array = Array.generateRandom(size: 10)
print(array)

打印例如:

[7, 6, 8, 4, 0, 3, 9, 2, 1, 5]

上述方法為您提供了唯一的數字。 但是,如果您需要冗余值,請使用以下實現:

public extension Array where Element == Int {
    static func generateRandom(size: Int) -> [Int] {
        guard size > 0 else {
            return [Int]()
        }
        var result = Array(repeating: 0, count: size)
        for index in 0..<result.count {
            result[index] = Int.random(in: 0..<size)
        }
        return result
    }
}

上面使用 map() 的較短版本:

public extension Array where Element == Int {
    static func generateRandom(size: Int) -> [Int] {
        guard size > 0 else {
            return [Int]()
        }
        var result = Array(repeating: 0, count: size)
        return result.map{_ in Int.random(in: 0..<size)}
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM