arrays - 如何检查元组数组是否包含 Swift 中的特定元组?

标签 arrays swift tuples

考虑以下 Swift 代码。

var a = [(1, 1)]

if contains(a, (1, 2)) {
    println("Yes")
}

我只需要检查 a 是否包含元组,但代码会导致错误。

Cannot find an overload for 'contains' that accepts an argument list of type '([(Int, Int)], (Int, Int))'

为什么会这样以及如何正确使用 contains

最佳答案

您可以使用谓词并检查是否相等:

let tuples = [(1, 1), (0, 1)]

let tuple1 = (1, 2)
let tuple2 = (0, 1)

if tuples.contains(where: {$0 == tuple1}) {
    print(true)
} else {
    print(false)    // false
}

if tuples.contains(where: {$0 == tuple2}) {
    print(true)    // true
} else {
    print(false)
}

您还可以创建自己的包含通用元组的方法:

extension Sequence  {
    func contains<T, U>(_ tuple: (T, U)) -> Bool where T: Equatable, U: Equatable, Element == (T,U) {
        contains { $0 == tuple }
    }
    func contains<T, U, V>(_ tuple: (T, U, V)) -> Bool where T: Equatable, U: Equatable, V: Equatable, Element == (T,U,V) {
        contains { $0 == tuple }
    }
    func contains<T, U, V, W>(_ tuple: (T, U, V, W)) -> Bool where T: Equatable, U: Equatable, V: Equatable, W: Equatable,Element == (T, U, V, W) {
        contains { $0 == tuple }
    }
    func contains<T, U, V, W, X>(_ tuple: (T, U, V, W, X)) -> Bool where T: Equatable, U: Equatable, V: Equatable, W: Equatable, X: Equatable, Element == (T, U, V, W, X) {
        contains { $0 == tuple }
    }
    func contains<T, U, V, W, X, Y>(_ tuple: (T, U, V, W, X, Y)) -> Bool where T: Equatable, U: Equatable, V: Equatable, W: Equatable, X: Equatable, Y: Equatable, Element == (T, U, V, W, X, Y) {
        contains { $0 == tuple }
    }
}

if tuples.contains(tuple1) {
    print(true)
} else {
    print(false)    // false
}

if tuples.contains(tuple2) {
    print(true)    // true
} else {
    print(false)
}

关于arrays - 如何检查元组数组是否包含 Swift 中的特定元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736244/

相关文章:

ios - 以编程方式创建推文时遇到问题

swift - 如何为增加宽度的渐变层设置动画?

scala - 为什么 Scala 在解包 Tuple 时要构造一个新的 Tuple?

javascript - 计算给定货币数组的变化

c - C 中的静态变量(在 main 中声明)。混淆

arrays - 如何用在module1 VBA中填充的数组填充列表框

objective-c - 如何发送 swift 选择器引用到 Objective C 属性

arrays - Oracle存储过程使用数组作为表插入的参数

python - 如何添加两个元组(或列表)的内容?

python - 对运算符表达式的结果调用函数? (掩码==instance_id).astype(np.uint8)