如何从swift上的两个列表打印

时间:2018-06-06 12:46:30

标签: arrays swift list random names

如果我有一个名字列表,然后是一个第二个名字的列表,那么如何从每个列表中的一个打印一个随机选择

let arrayX = ["James", "Andrew", "Sean"]
let arrayY = ["Smith", "Docherty", "Anderson"]

所以我可以拥有詹姆斯史密斯或安德鲁安德森?

3 个答案:

答案 0 :(得分:1)

使用随机生成的索引获取字符串。

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)))
}

答案 1 :(得分:1)

要从数组中选择随机项,您需要在其索引范围内生成随机数。

您可以使用arc4random_uniform:

在Swift中执行此操作
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])"

答案 2 :(得分:1)

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初始化程序将结果转换为元组数组。

此解决方案始终匹配名字和姓氏,i。即你要么得到James Smith,Andrew Doherty,要么是Sean Anderson。如果这不是您想要的,那么您将需要两个随机索引而不需要zip函数,如其他答案所示。