Массив в индексированный словарь в Swift 3
Расширение для массива
Итак, задачу преобразования массива в словарь мы реализуем с помощью расширения для всего типа коллекции «Массив».
В этом расширении мы создадим свойство indexedDictionary, которое будет типа словарь, с целочисленными ключами и любым типом объектов. Т.е. создавая подобную конструкцию, нам не нужно заботиться о типах элементов массива. Этот тип может быть любым, и наш код будет работать.
// // proSwift.ru // extension Array { var indexedDictionary: [Int: Element] { var result: [Int: Element] = [:] enumerated().forEach({ result[$0.offset] = $0.element }) return result } }
Перебирая элементы массива, в итоговый словарь для каждого элемента мы заносим в качестве ключа — смещение по индексу, а в качестве значения — сам элемент. Думаю, по коду все понятно.
Пример
// // proSwift.ru // //: Playground - noun: a place where people can play extension Array { var indexedDictionary: [Int: Element] { var result: [Int: Element] = [:] enumerated().forEach({ result[$0.offset] = $0.element }) return result } } let cars = ["Audi", "BMW", "Mercedes", "Volvo", "Jaguar", "Subaru", "Lexsus"] var dict = cars.indexedDictionary for (key, value) in dict { print("В словаре для ключа \(key) имеется значение \(value)") }
Смотрим на результат работы в консоле:
В словаре для ключа 2 имеется значение Mercedes В словаре для ключа 4 имеется значение Jaguar В словаре для ключа 5 имеется значение Subaru В словаре для ключа 6 имеется значение Lexsus В словаре для ключа 0 имеется значение Audi В словаре для ключа 1 имеется значение BMW В словаре для ключа 3 имеется значение Volvo
Из массива строк получился словарь с целочисленными ключами и значениями — данными из исходного массива. С учетом того, что словарь не гарантирует порядок, ключи и машины в консоле отобразились в случайном порядке.
Добавить комментарий