gpt4 book ai didi

swift - 按两个属性对对象数组进行排序

转载 作者:IT王子 更新时间:2023-10-29 05:07:17 25 4
gpt4 key购买 nike

在使用 NSSortDescriptor 之前已经询问并回答了这个问题,这很容易。但是是否有使用 Array.sort() 的 Swift 标准方法?

struct Sortable {
let isPriority: Bool
let ordering: Int
}

按一个属性对一组 Sortables 进行排序很简单:

sort { $0.ordering < $1.ordering }

但我想按 isPriority 排序,然后按 ordering 排序 - 我想不出一个简单的语句来实现这一点。

最佳答案

是的,使用 Array.sort()

有一个非常简单的方法

代码:

var sorted = array.sorted({ (s1, s2) -> Bool in
if s1.isPriority && !s2.isPriority {
return true //this will return true: s1 is priority, s2 is not
}
if !s1.isPriority && s2.isPriority {
return false //this will return false: s2 is priority, s1 is not
}
if s1.isPriority == s2.isPriority {
return s1.ordering < s2.ordering //if both save the same priority, then return depending on the ordering value
}
return false
})

排序后的数组:

true - 10
true - 10
true - 12
true - 12
true - 19
true - 29
false - 16
false - 17
false - 17
false - 17
false - 18

另一个更短的解决方案:

let sorted = array.sorted { t1, t2 in 
if t1.isPriority == t2.isPriority {
return t1.ordering < t2.ordering
}
return t1.isPriority && !t2.isPriority
}

关于swift - 按两个属性对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com