arrays - Swift - 对具有 bool 值和可选日期的人员数组进行排序

标签 arrays swift sorting

我想根据 3 个标准对一组人进行排序: 这个数组由具有 3 个信息的客户组成:

  1. 姓名(字符串)
  2. 已购买( bool 值)
  3. 购买日期(如果 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}

但我想做的是在单个数组中排序:

  1. 首先,通过 bool 值和名称(hasPurchased = false,名称orderedAscending)
  2. 然后,如果 hasPurchased = true,按购买日期排序,比较按升序排列的日期

这样,我会将尚未购买的“ABC”客户保存在一个数组中,然后将购买的客户按购买日期排序(在本例中为非空条件)...

说说你的看法

最佳答案

请注意,sort 的参数称为“areInIncreasingOrder”。给定两个 Customer 对象,您应该返回它们是否按递增顺序排列。因此,要确定两个客户是否按照您的 2 条规则递增:

  • 如果它们有不同的 hasPurchased 值,如果第二个购买了而第一个没有购买,则它们按升序排列
  • 否则,如果它们的 hasPurchased 值相同且为 false,则如果第一个的名字与第二个的名字按升序排列,则它们按升序排列
  • 否则,如果他们具有相同的 hasPurchasedtrue,则如果第一个的购买日期与第二个的购买日期按升序排列,则他们按升序排列日期

将其转化为代码:

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/

相关文章:

Javascript for/in 遍历属性,而不是索引并返回字符串

php - 如何将平面列表变成嵌套数组?

将所有数组元素复制到另一个数组中

java - 将 JSONObject 放入 JSONArray 或相反将额外的反斜杠添加到 JSON 数组 - Android

arrays - 这是想告诉我什么?

javascript - 禁用对除第一列以外的每一列的排序

Swift - 如何获取从协议(protocol)扩展的类?

ios - 无法在 View Controller 背景中显示完整图像

ios - 在数组中查找具有相同颜色的元素,如果它们彼此相邻则打印 true

c# - 如何按整数属性对类列表进行排序?