为什么我不能检查我的数组数组是否包含特定数组?

Why can't I check to see if my array of arrays contains a specific array?

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

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

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

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

怎么回事!?

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, { [=12=] == exp1 } ) {
    allCards.append(exp1)
}

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

Swift2更新:

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

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

if !allCards.contains( { [=10=] == exp1 } ) {
    allCards.append(exp1)
}