我想根据 3 个标准对一组人进行排序: 这个数组由具有 3 个信息的客户组成:
- 姓名(字符串)
- 已购买( bool 值)
- 购买日期(如果 hasPurchased = false,则可以为 nil)
我可以按姓名对客户进行排序,没问题:
customersList.sort(by: {$0.name!.compare($1.name!) == .orderedAscending})
我可以按 bool 值和名称排序,没问题:
customersList.sort {$1.hasPurchased == $0.hasPurchased ? ($0.name!.compare($1.name!) == .orderedAscending) : $1.hasPurchased && !$0.hasPurchased}
但我想做的是在单个数组中排序:
- 首先,通过 bool 值和名称(hasPurchased = false,名称orderedAscending)
- 然后,如果 hasPurchased = true,按购买日期排序,比较按升序排列的日期
这样,我会将尚未购买的“ABC”客户保存在一个数组中,然后将购买的客户按购买日期排序(在本例中为非空条件)...
说说你的看法
最佳答案
请注意,sort
的参数称为“areInIncreasingOrder”。给定两个 Customer
对象,您应该返回它们是否按递增顺序排列。因此,要确定两个客户是否按照您的 2 条规则递增:
- 如果它们有不同的
hasPurchased
值,如果第二个购买了而第一个没有购买,则它们按升序排列 - 否则,如果它们的
hasPurchased
值相同且为false
,则如果第一个的名字与第二个的名字按升序排列,则它们按升序排列 - 否则,如果他们具有相同的
hasPurchased
值true
,则如果第一个的购买日期与第二个的购买日期按升序排列,则他们按升序排列日期
将其转化为代码:
customerList.sort { c1, c2 in
if c1.hasPurchased != c2.hasPurchased {
// non-purchased customers are ordered before purchased customers
return c2.hasPurchased && !c1.hasPurchased
} else if !c1.hasPurchased { // both are non-purchased customers
// sort by name
return c1.name < c2.name
} else { // both are purchased customers
// sort by date
return c1.purchaseDate! < c2.purchaseDate!
}
}
关于arrays - Swift - 对具有 bool 值和可选日期的人员数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68710743/