比较 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
}
}
我想使用以下代码对 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
}
}