2017-02-24 7 views
2

plistでいくつかの繰り返しデータがあります。それを辞書に抽出し、アプリに表示します。唯一の問題は、それをplistに入れたのと同じ順番にする必要があることですが、明らかに辞書はソートできず、ソートされていません。だから私はこれをどのように達成するだろうか?私のplistのデータは、私は、その後のタイプ[Int : ItemType]の辞書にその変換このplistデータを並べ替える

enter image description here

のように繰り返される

、itemTypeにはこのように、私のデータプロトコルである:

になり
class ExhibitionUnarchiver { 
    class func exhibitionsFromDictionary(_ dictionary: [String: AnyObject]) throws -> [Int : ItemType] { 
     var inventory: [Int : ItemType] = [:] 
     var i = 0; 

     print(dictionary) 

     for (key, value) in dictionary { 
      if let itemDict = value as? [String : String], 
      let title = itemDict["title"], 
      let audio = itemDict["audio"], 
      let image = itemDict["image"], 
      let description = itemDict["description"]{ 
       let item = ExhibitionItem(title: title, image: image, audio: audio, description: description) 
       inventory.updateValue(item, forKey: i); 
       i += 1; 
      } 
     } 

     return inventory 
    } 
} 

このような辞書:

[12: App.ExhibitionItem(title: "Water Bonsai", image: "waterbonsai.jpg", audio: "exhibit-audio-1", description: "blah blah blah"), 17: App.ExhibitionItem..... 

私はキーのIntの私はそれを並べ替えることができたので、私は期待していたが、今まで私は運がないです。あなたは私がかなり新しいことを迅速に伝えることができるかもしれないので、あなたが関係すると思う情報を提供してください。ありがとう!

+0

私が思うに、あなたが特定の順序が必要な場合は、タイプArrayrootを作ります順序を維持する唯一の方法は、dictioの代わりに配列を使うことですnary。辞書内の 'Int'キーが重要な場合は、' title 'の隣に兄弟として格納します。 –

+0

辞書でコード内の配列に変換するのは簡単ですが、辞書内で順序を維持することは不可能です。 –

+0

私はそれについて考えていますが、それは 'ExhibitionItem'構造体の一部なので、通常の配列のように並べ替えることはできません。 –

答えて

1

辞書には順序がありません。

enter image description here


または手動キーでそれを並べ替える:

var root = [Int:[String:String]]() 
root[1] = ["title":"Hi"] 
root[2] = ["title":"Ho"] 

let result = root.sorted { $0.0 < $1.0 } 

print(result) 

プリント:

[(1, ["title": "Hi"]), (2, ["title": "Ho"])] 
+0

もしルートが配列だったら、あなたの例では、 "Item 0"、 "Item 1"などのようにキーでソートするでしょう –

+0

@ShanRobertson配列はインデックス0からcount-1のインデックスに配列されます。あなたが望む順序で。 – Hamish

+1

正確に。列挙キーは時代遅れです。答えにソートの例も追加しました。 – shallowThought

関連する問題