如何在 swift 2 中打印随机数组?
Posted
技术标签:
【中文标题】如何在 swift 2 中打印随机数组?【英文标题】:How to print a random array in swift 2? 【发布时间】:2016-02-07 14:30:35 【问题描述】:如果我有一个类似的数组
var array = ["heads", "tails"]
如何打印或显示随机数?有时是正面还是反面?
我目前是初学者。
语言 - Swift 2
【问题讨论】:
【参考方案1】:有两个选项可用于 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)])
【讨论】:
【参考方案2】:您只需要在0
和array length - 1
之间生成一个随机的Int
。
然后使用该数字访问数组。
let list = ["heads", "tails"]
assert(!list.isEmpty)
let random = Int(arc4random_uniform(UInt32(list.count)))
print(list[random])
【讨论】:
【参考方案3】:使用返回随机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
【讨论】:
它没有打印任何东西。 @user5895179 你必须使用打印:print(array[random() % 2])
试过了。给出错误。我正在使用 swift 在线编译器。
@user5895179 编辑后的答案与在线 Swift 编译器兼容。
谢谢!!上一个兼容xcode?span>
【参考方案4】:
你可以这样试试
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
【讨论】:
【参考方案5】:对于更通用的解决方案,对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
表示的任何 个整数。
(我现在注意到您在 cmets 到 Qbyte:s 的回答中提到您正在使用似乎不支持的在线编译器,例如 arc4random_uniform
。请参阅 @user3441734:s 回答以了解如何访问例如 @987654331 @这种情况下的方法)
【讨论】:
dfri,您仍然可以在 Linux 平台(IBM Sandbox)上使用 arc4random_uniform。看我的回答,怎么做...以上是关于如何在 swift 2 中打印随机数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode11 中的 Swift 中随机播放数组中的音频文件?
如何使用 userDefaults 保存打印数组(swift 3)