簡體   English   中英

按鍵值排序字典數組

[英]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) }

您可以使用NSArraysortUsingDescriptors功能:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM