[英]Sort Array of Dictionaries by Key Value
我有一個字典數組,我想通過每個字典中的“itemName”鍵按字母順序對它們進行排序。 我怎么能在Swift中做到這一點?
我想對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)
}
}
可能是這樣的,使用sort
:
let sortedArray = itemsArray.sort { $0["itemName"] < $1["itemName"] }
其中“$ 0”和“$ 1”分別代表數組中的每個字典及其后繼字典。
如果編譯器抱怨類型,因為它不知道此鍵的值是String,您可以像這樣進行轉換(如注釋中的@Cristik所述):
let sortedArray = itemsArray.sort { ($0["itemName"] as? String) < ($1["itemName"] as? String) }
您可以使用NSArray
的sortUsingDescriptors
功能:
let sortedArray = (itemsArray as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "itemName", ascending: true)]) as [[String:AnyObject]]
斯威夫特> 3
let sortedArray = (itemsArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "itemName", ascending: true)]) as! [[String:AnyObject]]
不是非常迅速,你失去了類型安全,但它確實是它的工作。
順便說一句,你的代碼中有很多強制轉換,有可能導致應用程序崩潰,你應該考慮切換到可選的代碼。
這對我有用:
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "itemName", ascending: true)
let sortedResults: NSArray = favArray.sortedArray(using: [descriptor]) as NSArray
我有一個字典數組,我按字母順序通過每個字典中的“firstname”鍵對數組進行排序。 您還可以通過將數組名稱放在此代碼和keyName中來對數組進行排序
/ *
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "firstname", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
let sortedResults: NSArray = yourArrayName.sortedArrayUsingDescriptors([descriptor])
self.user_Array = NSMutableArray(array: sortedResults)
* /
希望它能幫到你。
'$'/// items是字典數組/ *
let items: [[String: Any]] = [
["itemName":"ZZ_Item", "itemDescription":"Homer"],
["itemName":"AA_Item", "itemDescription":"Marge"],
["itemName":"VV_Item", "itemDescription":"Bart"],
["itemName":"BB_Item", "itemDescription":"Lisa"],
["itemName":"XY_Item", "itemDescription":"Maggie"],
["itemName":"CC_Item", "itemDescription":"Ned"]
]
print(items)
* / /// O / P un_sorted數組
/// [[“itemName”:“ZZ_Item”,“itemDescription”:“Homer”],[“itemName”:“AA_Item”,“itemDescription”:“Marge”],[“itemName”:“VV_Item”,“ itemDescription“:”Bart“],[”itemName“:”BB_Item“,”itemDescription“:”Lisa“],[”itemName“:”XY_Item“,”itemDescription“:”Maggie“],[”itemName“:” CC_Item“,”itemDescription“:”Ned“]]
///按itemsName鍵排序數組
func itemsSort(p1:[String:Any], p2:[String:Any]) -> Bool {
guard let s1 = p1["itemName"] as? String, let s2 = p2["itemName"] as? String else {
return false
}
return s1 < s2
}
let sortedItemsArray = items.sorted { itemsSort(p1:$0, p2:$1) }
print(sortedItemsArray)
//// O / P排序數組
[[“itemName”:“AA_Item”,“itemDescription”:“Marge”],[“itemName”:“BB_Item”,“itemDescription”:“Lisa”],[“itemName”:“CC_Item”,“itemDescription”: “Ned”],[“itemName”:“VV_Item”,“itemDescription”:“Bart”],[“itemName”:“XY_Item”,“itemDescription”:“Maggie”],[“itemName”:“ZZ_Item”, “itemDescription”:“荷馬”]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.