gpt4 book ai didi

swift - 在 Swift 结构中比较日/月

转载 作者:行者123 更新时间:2023-11-28 06:55:01 25 4
gpt4 key购买 nike

我想使用下面的代码对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com