我正在尝试从此数组中获取一个随机名称作为字符串而不是数字。
I.E:该数组通常返回 0 到 9 之间的随机数,我宁愿它返回 0 到 9 代表的字符串(如 Preston 或 James)而不是数字本身。
下面的代码有问题,但我希望它能让你明白我在做什么。
var firstName : [String] = ["Preston", "Ally", "James", "Justin", "Dave", "Bacon", "Bossy", "Edward", "Edweird" ]
var standardIdent = "First Name:\(firstName[random(0...9)]) Last Name:\(lastName[random(0...5)]) \n Age:\(rand())"
println(standardIdent)
感谢您的帮助!
最佳答案
您不应将 arc4random()
与 %
运算符一起使用。这引入了一个 modulo bias .
在 Swift 4.2 及更高版本中,您应该使用 randomElement()
:
let firstNames = ["Preston", "Ally", "James", "Justin", "Dave", "Bacon", "Bossy", "Edward", "Edweird"]
let randomFirstName = firstNames.randomElement()!
或者,如果数组可能为空,则不要使用强制解包运算符,而是:
guard let randomFirstName = firstNames.randomElement() else {
print("array was empty")
return
}
在 4.2 之前的 Swift 版本中,您应该:
您通常应该使用
arc4random_uniform
,而不是arc4random
,以消除模偏差。您可能应该使用数组中项目的计数来确定可能的索引值范围。
因此:
guard firstNames.count > 0 else { ... }
let index = Int(arc4random_uniform(UInt32(firstNames.count)))
let randomFirstName = firstNames[index]
关于arrays - Swift 从数组返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548439/