Как перебрать два массива с разным количеством элементов? Быстрый

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

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

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

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

При использовании zip, если два массива имеют разную длину, то дополнительные элементы более длинного массива просто игнорируются. Так что fighter, astronaut не печатаются

RajeshKumar R 13.06.2019 13:55

Да, они игнорируются, но как это сделать без "zip"? У меня ошибка: "Тип '([Люди], [Марсианин])' не соответствует протоколу 'Последовательность'"

Artem Boordak 13.06.2019 14:03

Используйте два цикла for, по одному для каждого массива

RajeshKumar R 13.06.2019 14:07

Учитывая ваш пример, что вы хотите распечатать? Кем вы хотите al.colorOfSkin быть, когда у вас закончатся инопланетяне?

Rob Napier 13.06.2019 19:05
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
5
767
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

for i in 0..<(max(arr1.count, arr2.count)) {
    if i < arr1.count {
        print(arr1[i])
    }
    if i < arr2.count {
        print(arr2[i])
    }
}
Ответ принят как подходящий

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

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

только что получил тот же результат - напечатал первые три элемента

Artem Boordak 13.06.2019 15:11

Может быть, я неправильно понял вопрос. Не могли бы вы уточнить немного больше.

PGDev 13.06.2019 18:27

Спасибо, теперь работает. Также я решил это сам, добавив в свой цикл переменную, которая += 1, и, когда переменная получает 3, я могу погрузиться во второй цикл. Но ваш способ намного элегантнее, так что еще раз спасибо.

Artem Boordak 15.06.2019 11:16

Примите и проголосуйте, если это сработало для вас. Удачного кодирования ?

PGDev 15.06.2019 11:17

Я принял, но мои голоса не учитываются, пока у меня репутация меньше 15. Но я проголосовал и будет засчитан, когда у меня будет 15 репутаций.

Artem Boordak 15.06.2019 12:38

Другие вопросы по теме