swift:扩展数组可比性
swift: extend array comparability
在 swift 中,4 个数组自动进行比较 - 但它们按顺序检查每个元素。元素 1 是否匹配元素 1,元素 2 匹配元素 2,等等? - 这可能是良好的标准行为。
但我想针对特定类型的 Interval 扩展/更改此行为,因此只要两个数组的内容匹配,元素的顺序是什么并不重要。即,如果两个数组都经过排序和匹配(使用原始行为),那么应该触发可比性。
问题是,通过定义我的新行为,我 'override' 并失去了现有的行为(理想情况下我希望保留这些行为,这样我可以在两个数组排序后进行测试)- 所以我得到警告 'All paths through this function will call itself'。任何想法如何解决请
extension Array where Element == Interval {
static func == (lhs: [Interval], rhs: [Interval]) -> Bool {
return lhs.sorted() == rhs.sorted()
}
}
首先让Interval符合Hashable。现在您可以将数组强制转换为 Set 并比较是否相等,而无需考虑顺序。
在 swift 中,4 个数组自动进行比较 - 但它们按顺序检查每个元素。元素 1 是否匹配元素 1,元素 2 匹配元素 2,等等? - 这可能是良好的标准行为。
但我想针对特定类型的 Interval 扩展/更改此行为,因此只要两个数组的内容匹配,元素的顺序是什么并不重要。即,如果两个数组都经过排序和匹配(使用原始行为),那么应该触发可比性。
问题是,通过定义我的新行为,我 'override' 并失去了现有的行为(理想情况下我希望保留这些行为,这样我可以在两个数组排序后进行测试)- 所以我得到警告 'All paths through this function will call itself'。任何想法如何解决请
extension Array where Element == Interval {
static func == (lhs: [Interval], rhs: [Interval]) -> Bool {
return lhs.sorted() == rhs.sorted()
}
}
首先让Interval符合Hashable。现在您可以将数组强制转换为 Set 并比较是否相等,而无需考虑顺序。