在Swift中按两个参数对数组进行排序

17

我想按照两个条件对数组进行排序,例如先按名称再按描述进行排序。但是先按名称再按描述排序是行不通的,因为这样数组就不会按名称排序。

解决方法应该像这样:

var sortedArray = sorted(items, { (o1: MyObject, o2: MyObject) -> Bool in
            return o1.name < o2.name and o1.description < o2.description
        })

谢谢

1个回答

29

您的语法看起来是正确的。只需将闭合标签改为

return o1.name == o2.name ? (o1.description < o2.description) : (o1.name < o2.name)

如果您想要超过两个排序条件,我建议使用老式的排序描述符。

let sortedArray = (unsortedArray as NSArray).sortedArrayUsingDescriptors([
  NSSortDescriptor(key: "name", ascending: true),
  NSSortDescriptor(key: "description", ascending: true),
  .... 
]) as! [Object]

为了使其首先按名称排序,然后按描述排序。否则它会同时按两个键进行排序。 - Paul Beusterien
当名称相同时(第1部分),它应该按描述(第2部分)排序,仅按名称(第3部分)排序,不重复。 - Mundi
请问如何在列表中添加第三个排序过滤器?我只能让它为两个工作。 - cmario
也许你应该在 Stack Overflow 上提一个新的问题。 - Mundi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接