web-dev-qa-db-ja.com

辞書を配列に変換する方法

辞書の各[String : Int]を配列内の文字列として表示して、辞書を配列に変換します。

例えば:

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

私はmyDict.keys.arraymyDict.values.arrayを知っていますが、それらを一緒に配列に表示したいです。ここに私が意味するものがあります:

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

前もって感謝します。

27
Nick

Forループを使用して、辞書のキーと値のペアを反復処理して配列を作成できます。

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

var arr = [String]()

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

注:ディクショナリはunorderedであるため、配列の順序は予期したものと異なる場合があります。


Swift 2以降では、これはmapでも実行できます。

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

これは次のように書くこともできます。

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

それほど短くなければより明確です。

35
vacawama

Swift 3のディクショナリのONLY VALUESから配列を作成する一般的なケースは次のとおりです(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)")
}
13
Ali

簡潔なコードが好きで、機能的なアプローチを好む場合は、キーコレクションで実行されるmapメソッドを使用できます。

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

または、@ vacawamaが示唆するように:

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

機能的に同等です

6
Antonio

キーと値から自分で新しい配列を作成して作成する必要があります。

のSwift配列ドキュメント :をご覧ください。

配列のappend(_ :)メソッドを呼び出すことにより、配列の末尾に新しいアイテムを追加できます。

これを試して:

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

var dictArray: [String] = []

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

Swiftの辞書にmap()を適用する最もクリーンな方法は何ですか? を使用している場合Swift 2.0:

2
MrHaze