Как перебрать два массива с разным количеством элементов? стриж - PullRequest
0 голосов
/ 13 июня 2019

У меня есть два массива с разными типами (классами) и количеством предметов там.Когда я пытаюсь пройти через них, я зацикливаю столько раз, сколько элементов в меньшем массиве.Мне нужно, чтобы он проходил через оба, и, когда меньший кончается, больший продолжает зацикливаться.Надеюсь увидеть некоторые предложения.

Итак, у меня есть два массива:

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"?У меня ошибка: «Тип» ([Люди], [Марсианин]) »не соответствует протоколу« Последовательность ».

Мой вопрос отличается от вопросов, которые задавались ранее, потому что у меня есть двамассивы с разным количеством элементов.И решения, представленные там, не подходят.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Вы можете просто сделать,

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: " "))
0 голосов
/ 13 июня 2019

Рабочее, но довольно простое решение

for i in 0..<(max(arr1.count, arr2.count)) {
    if i < arr1.count {
        print(arr1[i])
    }
    if i < arr2.count {
        print(arr2[i])
    }
}
...