2017-02-09 51 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

顺便说一下,请不要急于查看从字典中取回值的顺序,并编写依赖它的代码。它可能似乎工作,然后出卖你。不要这样做。 –