如何在swift 2中打印随机数组?

时间:2016-02-07 14:30:36

标签: swift2 swift-playground

如果我有像

这样的数组
var array = ["heads", "tails"]

我如何打印或随机显示?像有时候的头或尾?

我现在是初学者。

语言 - Swift 2

5 个答案:

答案 0 :(得分:2)

IBM Sandbox可以使用两个选项...

import SwiftShims
var array = ["heads", "tails"]
for _ in 0..<10 {
    print(array[Int(_swift_stdlib_arc4random_uniform(UInt32(array.count))])
}

import Glibc
var array = ["heads", "tails"]
for _ in 0..<10 {
   print(array[Int(random() % array.count)])
}

答案 1 :(得分:1)

您只需在Int0之间生成随机array length - 1

然后使用该数字访问数组。

let list = ["heads", "tails"]
assert(!list.isEmpty)
let random = Int(arc4random_uniform(UInt32(list.count)))
print(list[random])

答案 2 :(得分:0)

使用随机函数返回随机Int

import Foundation

// returns randomly 0 or 1
random() % 2

// returns randomly had or tails
array[random() % 2]

不幸的是,在线Swift编译器不支持random()因此我们必须自己实现一个随机生成器(来自Swift Book):

// random generator
final class LinearCongruentialGenerator {
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0

    func random() -> Double {
        lastRandom = ((lastRandom * a + c) % m)
        return lastRandom / m
    }
}

let r = LinearCongruentialGenerator()

var array = ["heads", "tails"]
for _ in 0..<100 {
    print(array[Int(r.random() * 2)])
}

这里是IBM Swift Sandbox

答案 3 :(得分:0)

对于更通用的解决方案,对array进行扩展,返回一个随机元素(如果数组为空,则为nil

extension Array {
    func getRandomElement() -> Element? {
        if self.count > 0 {
            return self[Int(arc4random_uniform(UInt32(self.count) ?? 0))]
        }
        else {
            return nil
        }
    }
}

var arr = ["heads", "tails"]
print(arr.getRandomElement() ?? "Array empty...") // "tails", ...

或者,使用非通用的精简解决方案

print(arr[Int(arc4random_uniform(2))])

方法arc4random_uniform(n)在范围0..<n中返回一个随机整数,在这种情况下,优于使用random()后跟模运算; random()返回 Int所代表的任何整数。

(我现在注意到你在给Qbyte的评论中提到:你的答案是你使用的是在线编译器,似乎不支持例如arc4random_uniform。请参阅@ user3441734:s答案如何访问例如arc4random_uniform这种情况的方法)

答案 4 :(得分:0)

您可以尝试这样

var array = ["heads", "tails"]

假设

var range = 100
random() % range  // It Returns int

它将返回0到100之间的随机数

rand() % 2 // It Returns Int32

array[rand()%2]  //Error
array[random()%2]  //Random