2017-02-09 84 views
1

所以我想要一本字典var billMap = [String: [Any]]()因爲這進入我的UITableView。這個字典的關鍵是部分,值對象變成了單元格。不幸的是,僅僅通過session(什麼成爲billMap關鍵)訂購輸入數據不影響字典billMap的順序:在創建密鑰之前,您是否可以不通過訂購密鑰來訂購字典?

let billArySorted = billAry.sorted(by: { 
    ($0 as! [String: Any])["session"] as! String > ($1 as! [String:Any])["session"] as! String 
}) 

var session = "" 
for item in billArySorted { 
    let dict = item as! [String:Any] 
    if session != dict["session"] as! String { 
     session = dict["session"] as! String 
     var bills = billArySorted.filter({var billTemp: AnyObject = $0 as! AnyObject; return billTemp["session"] as! String == session}) 
     var billsInSession = [AnyObject]() 

     for bill in bills { 
      let billObject: AnyObject = bill as! AnyObject 
      billsInSession.append(billObject) 
     } 

     self.billMap[session] = billsInSession 
    } 
... 

任何想法? Thx

+2

根據定義,字典是無序的。 – rmaddy

+0

是否有可以推薦的可選數據結構? C#有OrderedDictionary,但我在這裏找不到。 –

+1

使用一組字典或其他適當數據的數組。 – rmaddy

回答

1

不,你不能。字典沒有任何順序。您添加鍵/值對的順序無關緊要。

您需要使用不同的集合。正如rmaddy所說,一系列詞典應該有效。

+0

順便說一下,請不要急於查看從字典中取回值的順序,並編寫依賴它的代碼。它可能似乎工作,然後出賣你。不要這樣做。 –