swift - 扩展等式元组数组以找到第一个匹配的元组

标签 swift

这可能是一个菜鸟问题,但我似乎无法写出这样的东西

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/

相关文章:

arrays - 带有部分的表格 View 搜索栏

ios - 每秒运行一个 NSTimer 会有多费力?

ios - 将携带委托(delegate)的 UIViewcontroller 作为参数传递给 swift 函数的问题

ios - 相当于 bouncycaSTLe 的 CBCBlockCipherMac for swift

ios - 在我的 Objective-C 项目中进行 Swift 类集成后,无法在设备上进行编译

ios - Xcode 7 swift, '' 没有用 objective-c 选择器(函数)声明的方法”警告

swift - 创建 VPN 连接

iOS 8 滚动指示器未显示在 ScrollView 中

objective-c - NSSplitView 分隔线的起始位置

ios - Swift 3 中的 nextResponder