Ordenar matriz de dictionarys por valor key

Tengo una variedad de dictionarys y quiero orderarlos alfabéticamente por la key "itemName" en cada dictionary. ¿Cómo puedo hacer esto en Swift?

Quiero orderar los itemsArray.

let array = PFUser.currentUser()?.objectForKey("Collections") as! [[String : AnyObject]] let collectionsDictionary = array[0] itemsArray = collectionsDictionary[self.title!] as! [[String : AnyObject]] for dictionary in itemsArray { itemNames.append(dictionary["itemName"] as! String) itemUPC.append(dictionary["UPC"] as! String) pricePaid.append(dictionary["pricePaid"] as! String) currentPrice.append(dictionary["currentPrice"] as! String) model.append(dictionary["model"] as! String) if (dictionary["image"] != nil) { imagesArray.append(dictionary["image"] as! PFFile) } else { imagesArray.append(nil) } } 

Puede recurrir a la funcionalidad sortUsingDescriptors NSArray :

 let sortedArray = (itemsArray as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "itemName", ascending: true)]) as [[String:AnyObject]] 

No muy Swift-ish, y pierdes el tipo de security, pero es su trabajo.

Y por cierto, tiene muchos moldes forzados en su código, que tienen el potencial de bloquear su aplicación, en su lugar debería considerar cambiar a opcionales.

Probablemente algo como esto, usando sort :

 let sortedArray = itemsArray.sort { $0["itemName"] < $1["itemName"] } 

donde "$ 0" y "$ 1" representan respectivamente, en la matriz, cada dictionary y su sucesor.


Si el comstackdor se queja de los types porque no sabe que el valor de esta key es una cadena, puede lanzar de esta manera (como lo dijo @Cristik en los comentarios):

 let sortedArray = itemsArray.sort { ($0["itemName"] as? String) < ($1["itemName"] as? String) } 

Tengo una variedad de dictionarys y estoy orderando mi order alfabéticamente mediante la key "firstname" en cada dictionary. También puede orderar su matriz simplemente poniendo su nombre de matriz en este código y su key.

/ *

  let descriptor: NSSortDescriptor = NSSortDescriptor(key: "firstname", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:))) let sortedResults: NSArray = yourArrayName.sortedArrayUsingDescriptors([descriptor]) self.user_Array = NSMutableArray(array: sortedResults) 

* /

Espero que te sirva.