0

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

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

谢谢

4

2 回答 2

6

不要用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
}
于 2016-05-07T12:23:56.163 回答
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)) }
于 2016-05-07T12:14:43.613 回答