Это расширение:
extension Collection {
var indexedDictionary: [Int: Element] {
return enumerated().reduce(into: [:]) { $0[$1.offset] = $1.element }
}
}
добавляет свойство indexedDictionary
ко всем Collection
s в Swift.Массив имеет значение Collection
, поэтому к массивам это свойство добавляется к ним, когда вы добавляете это расширение в исходный файл Swift на верхнем уровне (не помещайте его внутри другого class
, struct
или enum
).Вам нужно только добавить это в один файл в вашем проекте, и тогда новое свойство будет доступно в каждом файле.
Затем вы просто вызываете indexedDictionary
для любого массива в вашем коде, и он возвращает Dictionary
типа [Int : Element]
, где Element
представляет тип в исходном массиве.Итак, если ваш массив с именем myArray
имеет тип [String]
, то myArray.indexedDictionary
вернет Dictionary
типа [Int : String]
.
Примеры:
let arr1 = ["a", "b", "c"]
let dict1 = arr1.indexedDictionary
print(dict1)
Выход:
[2: "c", 0: "a", 1: "b"]
// It works with dictionary literals
let dict2 = [5, 10, 15].indexedDictionary
print(dict2)
Выход:
[2: 15, 0: 5, 1: 10]
let arr3: [Any] = [true, 1.2, "hello", 7]
print(arr3.indexedDictionary)
Вывод:
[2: "hello", 0: true, 1: 1.2, 3: 7]
Примечание: Словари неупорядочены, поэтому, даже если порядок непредсказуем, сопоставление ключа и значенияэто то, что вы ожидаете.