我想使用下面的代码对 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({ $0 < $1 })
我想我只需要找到可比方法背后的正确逻辑即可:
func <(lhs: SpecialDay, rhs: SpecialDay) -> Bool
...但是我正在努力解决这个问题。我当前实现的逻辑显然没有正确排序。
如有任何提示,我们将不胜感激。
最佳答案
问题是在这一行中:
return lhs.day < rhs.day && lhs.month <= rhs.month
如果 lhs 月份小于 rhs 它应该总是返回真而不考虑日期。但是,当您与天数进行比较时,您可以得到假的天数不少于月份的真值,从而导致假值。你需要一些更复杂的东西:
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
}
}
关于swift - 在 Swift 结构中比较日/月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877618/