Swift-使用多个条件对对象数组进行排序

我有一个Contact对象数组

var contacts:[Contact] = [Contact]()

联系人类别:

Class Contact:NSOBject {

var firstName:String!

var lastName:String!

}

而且我想通过该数组进行排序lastName,然后firstName在某些情况下接触得到了相同的lastName

我可以按其中一个条件进行排序,但不能同时按两个条件进行排序。

contacts.sortInPlace({$0.lastName < $1.lastName})

我如何添加更多条件来对该数组进行排序?

回答:

想一想“按多个标准排序”是什么意思。这意味着首先通过一个条件比较两个对象。然后,如果这些条件相同,则领带将被下一个条件破坏,依此类推,直到获得所需的排序。

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

协议。这样,您可以使用Sequence.sorted()method,该方法会咨询您的Comparable.<(_:_:)运算符实现,以确定元素之间的比较方式。这样,您可以对任何s进行排序SequenceContact而不必重复排序代码。

以上是 Swift-使用多个条件对对象数组进行排序 的全部内容, 来源链接: utcz.com/qa/417778.html

回到顶部