Как изменить порядок двух массивов при сортировке одного массива? [Дубликат]

Raven спросил: 28 марта 2018 в 03:19 в: ios

У этого вопроса уже есть ответ:

  • In Swift how can I sort one array based on another array? 3 ответа

Если у меня есть:

var arrayOne = ["dog", "cat", "hamster", "horse"]​ и

var arrayTwo = [3, 2, 4, 1]

Как назначить 3 dog, 2 на cat, 4 до hamster и 1 до horse), чтобы при сортировке arrayTwo целое число до наименьшего, оно автоматически сделает это для arrayOne. В результате он распечатает:

var arrayOne = ["hamster", "dog", "cat", "horse"]

var arrayTwo = [4, 3, 2, 1]

Какой код проще и проще для этого ?

Спасибо в Advance! :) Р>


1 ответ

Есть решение
Sweeper ответил: 28 марта 2018 в 03:46

Довольно сложно"связать" две переменные вместе. Вы можете сделать что-то вроде этого:

let dict = [3: "dog", 2: "cat", 4: "hamster", 1: "horse"]var arrayTwo = [3, 2, 4, 1] {
    willSet {
        // you should probably check whether arrayTwo still has the same elements here
        arrayOne = newValue.map { dict[$0]! }
    }
}

Проще архивировать массивы, а затем сортировать по arrayTwo:

let result = zip(arrayOne, arrayTwo).sorted(by: { $0.1 > $1.1 })

Теперь result.map { $0.0 } - это ваш отсортированный массив 1, а result.map { $0.1 } - это ваш отсортированный массив 2.

Raven ответил: 29 марта 2018 в 06:52
Спасибо за все ваши ответы! Извините за задержку :( Все они очень полезны.