2017-02-24 3 views
2

plist에서 반복되는 데이터가 있습니다. 그런 다음 사전에 추출하여 내 앱에 표시합니다. 유일한 문제는 내가 그것을 plist에 넣은 순서와 같아야한다는 것입니다. 그러나 분명히 사전은 정렬 될 수 없으며 정렬되지 않습니다. 그럼 내가 어떻게 할 수 있니? 같은plist 데이터 정렬

내 PLIST 데이터의 반복이

enter image description here 내가 입력 한 다음 [Int : ItemType]의 사전에 그 변환

는 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 
    } 
} 

A의 결과 사전은 다음과 같습니다 :

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

키의 Int를 만들었으므로 정렬 할 수 있었지만 지금까지는 운이 없다는 것을 기대하고있었습니다. 당신은 내가 아주 빨리 새로운 것을 말할 수있을 것입니다. 그래서 관련성이 있다고 생각하는 정보를 제공해주십시오. 감사!

+0

내 생각을 특정하기 위해 필요한 경우, 유형 Arrayroot합니다

enter image description here


하거나 수동으로 키를 정렬 순서를 유지하는 유일한 방법은 딕테이션 대신 배열을 사용하는 것입니다. 네리. 사전에있는'Int' 키가 중요하다면'title '옆에있는 형제로 저장할 것입니다. –

+0

배열을 코드로 사전으로 변환하는 것은 쉽지만 사전에 순서를 유지하는 것은 불가능합니다. –

+0

나는 그것에 대해 생각 해왔다.하지만 'ExhibitionItem' 구조체의 일부이기 때문에 정상적인 배열처럼 정렬 할 수는 없을까? –

답변

1

사전에는 순서가 없습니다.

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의 인덱스로 정렬됩니다. * already * 당신이 원하는 순서대로. – Hamish

+1

정확히. 열거 키는 쓸모 없게됩니다. 답변에 정렬 예제도 추가했습니다. – shallowThought