Подтвердить что ты не робот

Как преобразовать словарь в массив

Я хочу преобразовать свой словарь в массив, показывая каждый [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"]

Спасибо заранее.

4b9b3361

Ответ 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: