Swift排序数组由2个参数组成

时间:2016-05-07 00:18:43

标签: arrays swift cosmicmind

该数组包含Entity实例(Core Data的图形库):

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

以上代码无效,我认为&amp;&amp;不是按多个值排序的正确方法......

{{1}}

感谢

2 个答案:

答案 0 :(得分:4)

不要使用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
}

答案 1 :(得分:1)

好的,如果您想先按公司排序,然后按名称排序,首先必须检查公司的平等性。如果公司是相同的,你会回归到按名称排序,否则,你只需返回两家公司之间的比较结果。

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)) }