Как преобразовать словарь в массив
Я хочу преобразовать свой словарь в массив, показывая каждый [String : Int]
словаря в виде строки в массиве.
Например:
var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
Я знаю myDict.keys.array
и myDict.values.array
, но я хочу, чтобы они отображались в массиве вместе. Вот что я имею в виду:
var myDictConvertedToArray = ["attack 1", "defend 5", "block 12"]
Спасибо заранее.
Ответы
Ответ 1
Это будет работать:
var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
var arr = [String]()
for (key, value) in myDict {
arr.append("\(key) \(value)")
}
Обратите внимание, что словари неупорядочены, поэтому порядок вашего массива может быть не таким, как вы ожидаете.
В Swift 2.0 это также можно сделать с помощью map
:
let arr = myDict.map {"\($0) \($1)"}
Ответ 2
Общий случай для создания массива из ТОЛЬКО ЗНАЧЕНИЙ словаря в Swift 3 (я предполагаю, что он также работает в более ранних версиях swift):
let arrayFromDic = Array(dic.values.map{ $0 })
Пример:
let dic = ["1":"a", "2":"b","3":"c"]
let ps = Array(dic.values.map{ $0 })
print("\(ps)")
for p in ps {
print("\(p)")
}
Ответ 3
Если вам нужен сжатый код и вы предпочитаете функциональный подход, вы можете использовать метод map
, выполняемый в коллекции ключей:
let array = Array(myDict.keys.map { "\($0) \(myDict[$0]!)" })
или, как было предложено @vacawama:
let array = myDict.keys.array.map { "\($0) \(myDict[$0]!)" }
который функционально эквивалентен
Ответ 4
Вам придется пройти и построить новый массив самостоятельно из ключей и значений.
Посмотрите документация быстрого массива:
Вы можете добавить новый элемент в конец массива, вызвав массивы append (_:) метод:
Попробуйте следующее:
var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
var dictArray: [String] = []
for (k, v) in myDict {
dictArray.append("\(k) \(v)")
}
Посмотрите Какой самый чистый способ применения map() для словаря в Swift?, если вы используете Swift 2.0: