如果我有像
这样的数组var array = ["heads", "tails"]
我如何打印或随机显示?像有时候的头或尾?
我现在是初学者。
语言 - Swift 2
答案 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)
您只需在Int
和0
之间生成随机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)])
}
答案 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