【发布时间】:2018-06-06 12:46:30
【问题描述】:
如果我有一个名字列表,然后是一个第二个名字列表,那么我如何从每个列表的 1 个中打印随机选择
let arrayX = ["James", "Andrew", "Sean"]
let arrayY = ["Smith", "Docherty", "Anderson"]
所以我可以选择詹姆斯史密斯或安德鲁安德森?
【问题讨论】:
标签: arrays swift list random names
如果我有一个名字列表,然后是一个第二个名字列表,那么我如何从每个列表的 1 个中打印随机选择
let arrayX = ["James", "Andrew", "Sean"]
let arrayY = ["Smith", "Docherty", "Anderson"]
所以我可以选择詹姆斯史密斯或安德鲁安德森?
【问题讨论】:
标签: arrays swift list random names
使用随机生成的索引获取字符串。
let arrayX = ["James", "Andrew", "Sean"]
let arrayY = ["Smith", "Docherty", "Anderson"]
print(arrayX[getRandomIndex(maxRange: arrayX.count)], arrayY[getRandomIndex(maxRange: arrayY.count)])
生成随机索引的函数:
func getRandomIndex(maxRange: Int) -> Int{
return Int(arc4random_uniform(UInt32(maxRange)))
}
【讨论】:
要从数组中选择一个随机项,您需要在其索引范围内生成一个随机数。
您可以在 Swift 中使用 arc4random_uniform 执行此操作:
Int(arc4random_uniform(UInt32(arrayX.count)))
一旦你知道如何做到这一点,你就可以很容易地从你的数组中生成一个随机名称:
let arrayX = ["James", "Andrew", "Sean"]
let arrayY = ["Smith", "Docherty", "Anderson"]
let randomForenameIdx = Int(arc4random_uniform(UInt32(arrayX.count)))
let randomSurnameIdx = Int(arc4random_uniform(UInt32(arrayY.count)))
let randomName = "\(arrayX[randomForenameIdx]) \(arrayY[randomSurnameIdx])"
【讨论】:
Swift 有一种很好的方式来使用 zip 函数来交织数组:
let firstNames = ["James", "Andrew", "Sean"]
let lastNames = ["Smith", "Docherty", "Anderson"]
let randomIndex = Int(arc4random_uniform(UInt32(firstNames.count)))
let randomName = Array(zip(firstNames, lastNames))[randomIndex]
print("\(randomName.0) \(randomName.1)")
zip(_:_:) 接受两个集合(即数组)并返回一个元组对序列,其中每对的元素是两个集合的对应元素。 Array 初始化器将结果转换为元组数组。
此解决方案始终匹配名字和姓氏,即。 e.你要么得到詹姆斯史密斯,安德鲁多尔蒂,要么肖恩安德森。如果这不是您想要的,那么您将需要两个随机索引并且没有 zip 函数,正如其他答案中所建议的那样。
【讨论】: