想想"按多个标准排序"是什么意思.这意味着两个对象首先按照一个标准进行比较.然后,如果这些条件相同,则下一个条件将打破联系,依此类推,直到获得所需的顺序.
let sortedContacts = contacts.sort {
if $0.lastName != $1.lastName { // first, compare by last names
return $0.lastName < $1.lastName
}
/* last names are the same, break ties by foo
else if $0.foo != $1.foo {
return $0.foo < $1.foo
}
... repeat for all other fields in the sorting
*/
else { // All other fields are tied, break ties by last name
return $0.firstName < $1.firstName
}
}
这里您看到的是Sequence.sorted(by:)
method,它参考提供的闭包来确定元素的比较方式.
如果你的分类将在许多地方使用,那么最好是使你的类型符合Comparable
protocol.这样,就可以使用Sequence.sorted()
method,它会参考Comparable.<(_:_:)
operator的实现来确定元素的比较方式.这样,您就可以对Contact
中的任何Sequence
进行排序,而无需复制排序代码.