🦢 Создание словаря из массивов в Swift
С помощью встроенной глобальной функции zip() можно соединить два массива в объект Zip2Sequence, который затем передается в инициализатор типа Dictionary:
let countries = ["Iran", "Iraq", "Syria", "Lebanon"]
let capitals = ["Tehran", "Bagdad", "Damascus", "Beirut"]
var seq = zip(countries, capitals)
var dict = Dictionary(uniqueKeysWithValues:seq)
for (key, value) in dict {
print("\(key) - \(value)")
}
В данном случае каждый элемент из массива countries последовательно сопоставляется с соответствующим элементом из массива capitals. Затем результат через параметр uniqueKeysWithValues передается в инициализатор Dictionary. И таким образом образуется словарь. Результат программы:
Iran - Tehran Iraq - Bagdad Syria - Damascus Lebanon - Beirut
Стоит учитывать, что если у нас в обоих массивах есть повторяющиеся значения, то подобный способ их объединения завершится с ошибкой, ведь в словаре все ключи должны быть уникальными. И для этого надо использовать другую форму инициализатора Dictionary:
let countries = ["Iran", "Iraq", "Syria", "Lebanon", "Iran"]
let capitals = ["Tehran", "Bagdad", "Damascus", "Beirut", "Tehran"]
var seq = zip(countries, capitals)
var dict = Dictionary(seq, uniquingKeysWith:{return $1})
for (key, value) in dict {
print("\(key) - \(value)")
}
В данном случае в инициализатор в качестве первого параметра опять же передается объединенные последовательности. А второй параметр uniquingKeysWith указывает на функцию, которая получает все значения из второго массива, которые соответствуют повторяющемуся ключу. В нашем случае это два элемента. И затем нам надо возвратить какой-нибудь результат. Здесь просто возвращается значение второго параметра.
📌 https://clc.to/5iqdOg
🐸
#буст #JuniorKit #Swift