Для эффективного решения вы можете сначала создать index .Индекс отображает каждый элемент в первом массиве на его позицию в массиве.Оба массива просматриваются только один раз:
let array1 = ["abc", "def", "ghi", "jkl", "xyz", "uhr"]
let array2 = ["ghi", "xyz", "uhr"]
let index = Dictionary(uniqueKeysWithValues: array1.enumerated().map {
($0.element, $0.offset)
})
let result = array2.compactMap { index[$0] }
print(result) // [2, 4, 5]
Если элементы в array1
не известны как уникальные, тогда индекс должен вычисляться немного по-разному:
let index = Dictionary(array1.enumerated().map { ($0.element, $0.offset) },
uniquingKeysWith: { (first, _) in first })
Второй параметрявляется замыканием, которое определяет, какое значение поместить в словарь в случае дублирования ключей.Здесь мы выбираем позицию первого вхождения элемента в массиве.