【问题标题】:Why can't I check to see if my array of arrays contains a specific array?为什么我不能检查我的数组是否包含特定数组?
【发布时间】:2015-12-03 08:34:03
【问题描述】:

我正在尝试检查数组数组是否包含字符串数组。我的错误信息说:

“找不到接受'([([(String)])]), [(String)])'类型参数列表的'contains'的重载”

var allCards = [[String]]()
var exp1 = [String]()

if !contains(allcards, exp1) {
    allCards.append(exp1)
}

发生了什么事!?

【问题讨论】:

  • contains 方法中使用的类应该实现 Equatable 协议。因为需要检查两个元素是否相等。

标签: arrays swift contains


【解决方案1】:

Array 不符合Equatable 协议,因此

/// Return `true` iff `x` is in `seq`.
func contains<S : SequenceType where S.Generator.Element : Equatable>(seq: S, x: S.Generator.Element) -> Bool

不能在这里使用。您可以使用基于谓词的变体

/// Return `true` iff an element in `seq` satisfies `predicate`.
func contains<S : SequenceType, L : BooleanType>(seq: S, predicate: @noescape (S.Generator.Element) -> L) -> Bool

改为:

var allCards = [[String]]()
var exp1 = [String]()

if !contains(allCards, { $0 == exp1 } ) {
    allCards.append(exp1)
}

因为== 是为Equatable 元素的数组定义的。

【讨论】:

    【解决方案2】:

    Swift2 更新:

    contains() 现在是在Sequence 的协议扩展中定义的函数,因此:

    var allCards = [[String]]()
    var exp1 = [String]()
    
    if !allCards.contains( { $0 == exp1 } ) {
        allCards.append(exp1)
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 2021-05-03
      • 2020-07-15
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多