Сортировка 3 взаимосвязанных массива

Есть 3 взаимосвязанных массива. Данные подтягиваются с сайта (json), каждый раз при запуске порядок сортировки в массивах разный, но при этом данные в массивах соответствую друг другу, т.е код валюты в 1 массиве соответствует названию валюты во 2 массиве и стоимости валюты в третьем массиве

1 — Код валюты ["BRL", "GBP", "CNY", ...]

2 — Название валюты ["Бразильский реал", "Фунт стерлингов Соединенного королевства", "Китайский юань, ...]

3 — Стоимость валюты [14.0838, 101.369, 11.4177, ...]

Так как массивы взаимосвязаны никак не могу отсортировать алфавиту, например по названию валюты. Если отсортировать 1 массив, то данные во 2 и в 3 уже не будут соответствовать сортировке в 1 массиве и т.д.

Два массива я смог отсортировать, а вот как три?

Спасибо!


Ответы (1 шт):

Автор решения: schmidt9

Можно связать данные из массивов в объекты, тогда с ними будет проще работать

struct Currency {
    var abbreviation: String
    var name: String
    var value: Double
}

let arr1 = ["BRL", "GBP", "CNY"]
let arr2 = ["Бразильский реал", "Фунт стерлингов Соединенного королевства", "Китайский юань"]
let arr3 = [14.0838, 101.369, 11.4177]

// map arrays

assert(arr1.count == arr2.count && arr2.count == arr3.count)

var currencies = [Currency]()

for i in 0..<arr1.count {
    currencies.append(Currency(abbreviation: arr1[i], name: arr2[i], value: arr3[i]))
}

// test sorting

let sortedByAbbreviation = currencies.sorted { item1, item2 in
    item1.abbreviation < item2.abbreviation
}

print(sortedByAbbreviation)

let sortedByName = currencies.sorted { item1, item2 in
    item1.name < item2.name
}

print(sortedByName)

let sortedByValue = currencies.sorted { item1, item2 in
    item1.value < item2.value
}

print(sortedByValue)
→ Ссылка