元组符合Comparable吗?

问题描述 投票:0回答:1

Swift 中的元组似乎符合

Comparable
,因为我得到了这些结果:

print ( (3,0) < (2,10000) ) // false
print ( (0,0,5) < (0,0,7) ) // true

它似乎对元组进行从左到右的逐个成员比较:它将第一个元组成员相互比较,然后是第二个,依此类推,直到找到一对不相等的元素,并返回是否该对中的第一个成员小于第二个。非常有道理。

它甚至适用于包含多种类型的元组,只要它们具有可比性,并且只要被比较的两个元组属于同一类型:

print( ("a",4) < ("b",3) ) // true

那么为什么会出现错误?

print ( [(1,2),(0,2)].max() )   ⛔️ Type '(Int, Int)' cannot conform to 'Comparable'

认为如果我显式声明类型可能会有所帮助,我尝试了:

typealias IntPair = (Int,Int)

let a: IntPair = (0,1)
let b: IntPair = (0,2)
let array: [IntPair] = [a,b]
print(array.max())   ⛔️ Type '(Int, Int)' cannot conform to 'Comparable'

我唯一的结论是静态函数

<
是在相同类型的元组上定义的,其组件都是
Comparable
,但这些元组仍然不符合
Comparable
。但这似乎不太可能。

有谁知道为什么

max()
不适用于参数均为
Comparable
的相同类型元组数组?

swift tuples max comparable comparison-operators
1个回答
0
投票

不!只有名义(“命名”)类型才能符合协议,其中不包括元组。

标准库恰好为最多 8 个元素的元组定义了

<
运算符。

© www.soinside.com 2019 - 2024. All rights reserved.