2015-08-06 15 views
17

Chcę przekonwertować słownik do tablicy, pokazując każdy [String : Int] słownika jako ciąg w tablicy.Jak przekonwertować słownik do tablicy

Na przykład:

var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12] 

Jestem świadomy myDict.keys.array i myDict.values.array, ale chcę, żeby pokazać się w tablicy razem. Oto co mam na myśli:

var myDictConvertedToArray = ["attack 1", "defend 5", "block 12"] 

Z góry dziękuję.

+1

Zauważ, że 'myDict.values.array' jest teraz' array (myDict.values) ' –

Odpowiedz

22

to będzie działać:

var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12] 

var arr = [String]() 

for (key, value) in myDict { 
    arr.append("\(key) \(value)") 
} 

Zauważ, że słowniki są nieuporządkowaną, więc kolejność macierzy nie może być to, czego oczekują.

W Swift 2.0, to również można zrobić z map:

let arr = myDict.map {"\($0) \($1)"} 
1

Będziesz musiał przejść i skonstruować nową tablicę samodzielnie z klawiszy i wartości.

spojrzeć 's swift array documentation:

Można dodać nowy element do końca tablicy przez wywołanie tablicy za append (_ :) metodę:

Spróbuj tego:

var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12] 

var dictArray: [String] = [] 

for (k, v) in myDict { 
    dictArray.append("\(k) \(v)") 
} 

Wystarczy popatrzeć na What's the cleanest way of applying map() to a dictionary in Swift? jeśli używasz Swift 2.0:

5

Jeśli podoba Ci się kod zwięzły i wolą podejście funkcjonalne, można użyć metody map wykonywany w sprawie zbierania kluczy:

let array = Array(myDict.keys.map { "\($0) \(myDict[$0]!)" }) 

albo, jak sugeruje @vacawama:

let array = myDict.keys.array.map { "\($0) \(myDict[$0]!)" } 

który jest funkcjonalnym odpowiednikiem

+0

Nicea, @Antonio! Może to być również napisane jako 'let array = myDict.keys.array.map {" \ ($ 0) \ (myDict [$ 0]!) ​​"}'. Wydajność jest taka sama, a 1 cała postać krótsza. :-) – vacawama

8

ogólnym przypadku tworzenia tablicę Spośród tylko wartości słownika w Swift 3 jest (zakładam, że działa również w starszych wersjach systemu SWIFT):

let arrayFromDic = Array(dic.values.map{ $0 }) 

Przykład:

let dic = ["1":"a", "2":"b","3":"c"] 

let ps = Array(dic.values.map{ $0 }) 

print("\(ps)") 

for p in ps { 
    print("\(p)") 
} 
Powiązane problemy