gpt4 book ai didi

arrays - 如何在同一个 for 循环中运行三个单独的数组?

转载 作者:搜寻专家 更新时间:2023-10-31 08:09:16 24 4
gpt4 key购买 nike

我尝试运行三个数组,我想在一个函数中使用所有三个数组的值。这可能听起来令人困惑,但这是我所拥有的:

    var Name = [Joe, Sarah, Chad]
var Age = [18, 20, 22]
var Gender = [Male, Female, Male]

for name in Name {
for age in Age {
for gender in Gender {
makeUser(name, userAge: age, userGender: gender)
}
}
}

这会运行,但我得到的是:(makeUser 打印出 3 个值)

Joe, 18, Male
Joe, 20, Male
Joe, 22, Male

Joe, 18, Female
Joe, 20, Female
Joe, 22, Female ....

等等。

我想要的是

Joe, 18, Male
Sarah, 20, Female
Chad, 22, Male

这可能吗?任何帮助表示赞赏。

谢谢!

最佳答案

这是一个非常普遍的需求,所以标准库用一个函数来满足它,zip:*

for (a,b) in zip(seq1, seq2) {
// a and b will be matching pairs from the two sequences
}

不幸的是,截至目前,zip 只做对,即使理论上它可以重载做三元组。不过,这没什么大不了的,你可以嵌套它们:

var names = ["Joe", "Sarah", "Chad"]
var ages = [18, 20, 22]
var genders: [Gender] = [.Male, .Female, .Male]

for (name,(age,gender)) in zip(names,zip(ages,genders)) {
makeUser(name, userAge: age, userGender: gender)
}

请注意,它只会提供最短的序列,因此如果姓名多于年龄或性别,您将只会获得匹配的姓名。

与使用索引相比,这似乎是不利的一面,而且看起来也更复杂,但替代方案的简单性具有欺骗性。请记住,如果您在不匹配的数组旁边使用 indicesenumerate 会发生什么——您会得到一个数组越界断言(或者您有放入检查逻辑)。

zip 避免了这个问题。这也意味着您可以使用序列而不是集合,以及使用没有整数索引的集合(与 enumerate 不同)或具有不同索引类型的集合(例如 String 和一个数组)。

*(无论如何,在当前的测试版中——zip 返回一个 Zip2 对象。在 Swift 1.1 中,您需要创建 Zip2 版本直接作为 zip 刚刚被引入)

关于arrays - 如何在同一个 for 循环中运行三个单独的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28686647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com