这可能是一个菜鸟问题,但我似乎无法写出这样的东西
extension Array where Element == (E1, E2), E1: Equatable, E2: Equatable {
func contains(_ tuple: (E1, E2)) -> Bool {
return contains { $0.0 == tuple.0 && $0.1 == tuple.1 }
}
}
我想要的是扩展一个由 Equatable
值组成的元组数组,以便我可以查明某个元组是否属于该数组。
我可以像这样写一个免费的函数
func inArray<E1: Equatable, E2: Equatable>(_ tuple: (E1, E2), _ array: [(E1, E2)]) -> Bool {
return array.contains { t in t.0 == tuple.0 && t.1 == tuple.1 }
}
,但如果可能的话,我想将此函数附加到 Array
。
另请注意,我有点受困于元组,因此不能使用其他构造,如 Equatable
structs/enums/classes 来对此建模。
最佳答案
您可以通过约束方法而不是 扩展名:
extension Array {
func contains<E1, E2>(_ tuple: (E1, E2)) -> Bool where E1: Equatable, E2: Equatable, Element == (E1, E2) {
return contains { $0.0 == tuple.0 && $0.1 == tuple.1 }
}
}
例子:
let a = [(1, "a"), (2, "b")]
print(a.contains((1, "a")))
关于swift - 扩展等式元组数组以找到第一个匹配的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718828/