比较 Swift 结构中的 Day/Month

Compare Day/Month in Swift Struct

我想使用以下代码对 SpecialDay 实例数组进行排序:[struct1、struct2、struct3、...]:

struct SpecialDay: Hashable, Comparable {
    var day: Int
    var month: Int

    var hashValue: Int {
        return (31 &* day.hashValue &+ month.hashValue)
    }
}

func ==(lhs: SpecialDay, rhs: SpecialDay) -> Bool {
    return lhs.day == rhs.day && lhs.month == rhs.month
}

func <(lhs: SpecialDay, rhs: SpecialDay) -> Bool {
    return lhs.day < rhs.day && lhs.month <= rhs.month
}

排序会这样进行:

let newArray = currentArray.sorted({ [=13=] <  })

我想我只需要找到可比较方法背后的正确逻辑即可:

func <(lhs: SpecialDay, rhs: SpecialDay) -> Bool

...但是我正在努力解决这个问题。我目前实现的逻辑显然没有正确排序。

如有任何提示,我们将不胜感激。

问题出在这一行:

return lhs.day < rhs.day && lhs.month <= rhs.month

如果 lhs 月份小于 rhs 它应该总是 return true 不考虑日期。但是,当您与天数进行比较时,您可以得到假的天数不少于月份的真值,从而导致假值。你需要一些更复杂的东西:

func <(lhs: SpecialDay, rhs: SpecialDay) -> Bool {
    if lhs.month < rhs.month { return true }
    else if lhs.month > rhs.month { return false }
    else {
        return lhs.day < rhs.day
    }
}