Swift 3 сравнение индексов массива

#arrays #swift #indexing

#массивы #swift #индексирование

Вопрос:

Если у меня есть два массива и я хочу сравнить их индексы, например:

 let var a1 = ["1", "2", "3"]
let var a2 = ["3", "2", "3"]
  

И я хотел напечатать что-нибудь, чтобы сказать, какой индекс не совпадает, например:

 if a1[0] != a2[0] amp;amp; a1[1] == a2[1] amp;amp; a1[2] == a2[2]{
print("Index 0 is not the same.")
  

Должен ли я написать еще 7 таких операторов, чтобы показать все 8 возможностей всех правильных / неправильных / неверных индексов 1 и 1 и т. Д.?

Спасибо!

Ответ №1:

Вы можете получить все индексы следующим образом:

 let diffIndex = zip(a1, a2).enumerated().filter {$1.0 != $1.1}.map {$0.offset}
  

Объяснение:

  • zip создает последовательность пар
  • enumerated() добавляет индекс к последовательности
  • filter сохраняет только пары с разными значениями
  • map собирает индекс и строит последовательность результатов.

Запуск этого на

 let a1 = ["1", "2", "3", "4"]
let a2 = ["3", "2", "3", "5"]
  

Это создает последовательность [0, 3]

Ответ №2:

Попробуйте это

 let a1 = ["1", "2", "3"]
let a2 = ["3", "2", "3"]

let result = zip(a1, a2).map({ $0 == $1 }).reduce(true, {$0 amp;amp; $1})
  

Ответ №3:

Используйте for цикл:

 for i in 0..<a1.length {
    if a1[i] != a2[i] {
        print("Index (i) is not the same")
    }
}
  

Как правило, если вы обнаружите, что повторяете один и тот же код, но с разными номерами, вы можете заменить его for циклом.

Комментарии:

1. Спасибо! Будет ли работать тот же цикл for, если значения будут строками, а не целыми числами?

2. @3Beard В этом цикле не делается никаких предположений о типах элементов a1 и a2 , если != может быть применен оператор.

Ответ №4:

Конечно, вы могли бы сделать что-то подобное:

 let a1 = ["1", "2", "3"]
let a2 = ["3", "2", "3"]

var compareResult : [String] = [String]()

if a1.count == a2.count { // Need to check they have same length

    for count in 0..<a1.count {
        let result : String = a1[count] == a2[count] ? "MATCH" : "MISMATCH"
        compareResult.append(result)
    }

    print(compareResult)
    // Do something more interesting with compare result...
}