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

Нет, вы не можете. У словаря нет никакого порядка. Порядок, в котором вы добавляете пары ключ/значение, не имеет значения.

Вам нужно использовать другую коллекцию. Массив словарей должен работать, как предполагает г-н.

+0

И, кстати, удержаться от желания взглянуть на порядок, в котором вы возвращаете значения из словаря и писать код, который опирается на него. Возможно, он работает, а затем предал вас. Не делай этого. –

Смежные вопросы