У меня есть string array
, и я хочу преобразовать его в Dictionary
, используя array
index
в качестве ключа в Dictionary
.
array = ["string1", "string2", "string3"]
преобразовать в:
dictionary = [0 : "string1", 1 : "string2", 2 : "string3"]
вы также можете использовать инициализатор Dictionary (uniqueKeysWithValues :) и передать новый массив из вашего массива, перечисленного let dictionary = Dictionary(uniqueKeysWithValues: Array(array.enumerated()))
спасибо, Лео, я ценю вашу помощь, как я могу преобразовать словарь в [String: Any], ваше решение вернет [Int: String], мне нужно, чтобы ключ словаря был строкой, так как это передается в базу данных Firebase и выдает ошибку, поскольку не ожидает Int в качестве ключа
let dictionary = array.enumerated().reduce(into: [:]) { $0[String($1.offset)] = $1.element }
Почему вы хотите, чтобы тип значения был Any, если массив содержит только строки? вам, вероятно, следует использовать [String:String]
Если вам действительно нужен [String: Any], вам просто нужно преобразовать элементы в Any let dictionary = array.enumerated().reduce(into: [:]) { $0[String($1.offset)] = $1.element as Any }
.
другой подход для получения [String:String]
с использованием инициализатора словаря let dict = Dictionary(uniqueKeysWithValues: array.enumerated().map{(String($0),$1)})
для [String:Any]
с использованием инициализатора словаря let dict = Dictionary(uniqueKeysWithValues: array.enumerated().map{(String($0),$1 as Any)})
Большое спасибо @LeoDabus, это действительно помогло. Данные теперь в формате, который мне нужен для загрузки в Firebase DB - еще раз спасибо.
Я обновил ссылку на дублированный вопрос, если вы хотите проверить, что расширение теперь также возвращает [String:Element]
для Swift 4.
let dictionary = array.enumerated().reduce(into: [:]) { $0[$1.offset] = $1.element }