【发布时间】:2019-06-13 11:50:11
【问题描述】:
我有两个具有不同类型(类)和项目数量的数组。当我尝试遍历它们时,我在较小的数组中循环了尽可能多的项目。我需要它循环通过两个,当较小的一端,较大的一端继续循环。希望看到一些建议。
所以,我有两个数组:
var humanArray = [human, cook, manager, fighter, astronaut]
和:
let alienArray = [martian, twixian, snikersian]
它们是不同的类:
let human = People(name: "John Dou", height: 180, weight: 80, gender: "male")
和:
let martian = Martian(numberOfLegs: 1, colorOfSkin: .red)
然后我遍历它们:
for (hum, al) in zip(humanArray, alienArray) {
print("""
\(hum.TypeName) \(hum.name),
\(hum.TypeName) \(hum.height),
\(hum.TypeName) \(hum.weight),
\(hum.TypeName) \(hum.gender),
\(al.TypeName) \(al.numberOfLegs),
\(al.TypeName) \(al.colorOfSkin)
""")
hum.say()
al.say()
}
那么我应该怎么做才能获得所有 5 次迭代?或者如何在没有“zip”的情况下做这样的事情(循环两个数组)?没有它,我有一个错误:是的,它们被忽略了,但是没有“zip”怎么办?我有一个错误:“类型 '([People], [Martian])' 不符合协议 'Sequence'”。
我的问题与之前提出的问题不同,因为我有两个包含不同数量项目的数组。那里提供的解决方案是不合适的。
【问题讨论】:
-
当使用
zip时,如果两个数组的长度不同,那么较长数组的附加元素将被忽略。所以fighter, astronaut没有打印出来 -
是的,它们被忽略了,但是没有“zip”怎么办?我有一个错误:“类型 '([People], [Martian])' 不符合协议 'Sequence'”
-
使用两个for循环,每个数组一个
-
以您的示例为例,您希望它打印出什么?当你的外星人用完时,你希望
al.colorOfSkin成为什么?