簡體   English   中英

通過2個參數快速排序數組

[英]Swift sort array by 2 parameters

該數組包含Entity實例(核心數據的圖形庫):

let timCook = Entity(type: "Employees")
timCook["name"] = "Tim Cook"
timCook["company"] = "Apple"

上面的代碼不起作用,我認為&&不是按多個值排序的正確方法...

self.storage.sortInPlace ({ ($0["company"] as? String) < ($1["company"] as? String)
                             && ($0["name"] as? String) < ($1["name"] as? String)
                         })

謝謝

不要as! 非常。 實際上,根本不使用它。 如果您確定該值存在,則應該選擇其他數據類型而不是字典。

struct Storage {
    let company: String
    let name: String
}

var storage: [Storage]

// fill storage with objects

storage.sortInPlace {
    if $0.company == $1.company { return $0.name < $1.name }
    return $0.company < $1.company
}

好的,如果要先按公司排序,然后再按名稱排序,則首先必須檢查公司的平等性。 如果公司相同,則返回名稱排序,否則,僅返回兩個公司之間的比較結果。

self.storage.sortInPlace {
    if ($0["company"] as! String) == ($1["company"] as! String)
    {
        return ($0["name"] as! String) < ($1["name"] as! String)
    }
    return $0["company"] as! String) < ($1["company"] as! String)
}

甚至更短:

self.storage.sortInPlace { (($0["company"] as! String) == ($1["company"] as! String)) ? (($0["name"] as! String) < ($1["name"] as! String)) : ($0["company"] as! String) < ($1["company"] as! String)) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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