在swift中创建随机数组

时间:2015-01-25 18:53:11

标签: ios arrays swift arc4random

我刚刚开始学习迅捷。 我试图创建一个包含几个随机数的数组,并最终对数组进行排序。我能够创建一个随机数的数组,但是最好的方法是迭代这个以创建一个随机数的数组吗?

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

    let numList = Array(arrayLiteral: randomNums)

}

makeList()

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:14)

好的,这是a question asked elsewhere的复制/粘贴,但我想我会试着记住那个单行:

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

(我喜欢它!)

修改

如果你需要一个带有upperBound(不包括)的随机数,请使用arc4random_uniform(upperBound)

e.g。 :0和0之间的随机数99:arc4random_uniform(100)

Swift 2更新

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

答案 1 :(得分:8)

修改/更新: Swift 4.2或更高版本

Swift 4.2 中,有一个新的固定宽度整数静态方法,使语法更加用户友好:

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

我们还可以扩展RangeClosedRange并创建一个方法来返回n个随机元素:

extension Range where Bound: FixedWidthInteger {
    func randomElements(_ n: Int) -> [Bound] {
        guard n > 0 else { return [] }
        return (0..<n).map { _ in .random(in: self) }
    }
    var randomElement: Bound { return .random(in: self) }
}

extension ClosedRange where Bound: FixedWidthInteger {
    func randomElements(_ n: Int) -> [Bound] {
        guard n > 0 else { return [] }
        return (0..<n).map { _ in .random(in: self) }
    }
    var randomElement: Bound { return .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 以及之前的点击here

答案 2 :(得分:4)

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]

答案 3 :(得分:0)

这个怎么样? 在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)}
    }
}

答案 4 :(得分:0)

快速5

这将创建一个大小为5的数组,其元素范围为1到10(含1和10)。

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