Martin
(Martin R)
1
As of Swift 4.1, Array conforms to Equatable if its element type does, and as of Swift 4.2, Array conforms to Hashable if its element type does.
Has it been discussed whether a conditional conformance to Comparable should also be synthesized for Array (and ArraySlice, ContiguousArray)? The lexicographic comparison of the array elements seems to be the natural choice.
2 Likes
saagarjha
(Saagar Jha)
2
What would the semantics of such an Array comparison be, exactly? If a and b are Arrays and a < b, does this mean that every element in a is less than every element of b? Or is it a "dictionary" comparison, similar to what strings do: going element by element and returning the comparison result of the first elements that differ, or stopping returning true if the first operand is a prefix of the second?
Martin
(Martin R)
3
The latter (which is what I know as the “lexicographical order”). This is also used for tuple comparison. An implementation could look like this:
extension Array: Comparable where Element: Comparable {
public static func < (lhs: [Element], rhs: [Element]) -> Bool {
for (leftElement, rightElement) in zip(lhs, rhs) {
if leftElement < rightElement {
return true
} else if leftElement > rightElement {
return false
}
}
return lhs.count < rhs.count
}
}
1 Like
Tino
(Tino)
4
We even have comparison operators for tuples...
I don't think those make much sense, but given that precedent, I can't see why Array shouldn't conform to Comparable.