我有两个具有不同类型(类)和数量的数组。当我尝试遍历它们时,我会在较小的数组中遍历尽可能多的项目。我需要它遍历两个端点,当较小的端点时,较大的端点继续循环。希望看到一些建议。
所以,我有两个数组:
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'”。
我的问题与之前提出的问题不同,因为我有两个数组,每个数组的项目数量不同。并且在那里提供的解决方案是不合适的。
答案 0 :(得分:0)
有效但基本的解决方案
for i in 0..<(max(arr1.count, arr2.count)) {
if i < arr1.count {
print(arr1[i])
}
if i < arr2.count {
print(arr2[i])
}
}
答案 1 :(得分:0)
您可以轻松完成
var i = 0
for _ in 0..<min(alienArray.count, humanArray.count) {
print(humanArray[i].name, alienArray[i].numberOfLegs)
i += 1
}
print(humanArray[i...].compactMap({ $0.name }).joined(separator: " "))
print(alienArray[i...].compactMap({ $0.numberOfLegs }).joined(separator: " "))