如何遍历具有不同项目数量的两个数组?迅速

时间:2019-06-13 11:50:11

标签: arrays swift loops

我有两个具有不同类型(类)和数量的数组。当我尝试遍历它们时,我会在较小的数组中遍历尽可能多的项目。我需要它遍历两个端点,当较小的端点时,较大的端点继续循环。希望看到一些建议。

所以,我有两个数组:

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'”。

我的问题与之前提出的问题不同,因为我有两个数组,每个数组的项目数量不同。并且在那里提供的解决方案是不合适的。

2 个答案:

答案 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: " "))