在Swift中,我如何检查数组中是否存在一个元素?Xcode并没有给出包含、包含或拥有的建议,快速搜索这本书也一无所获。知道怎么检查这个吗?我知道有一个方法找到返回索引号,但是否有一个方法返回一个布尔像ruby的#include??

我需要的例子:

var elements = [1,2,3,4,5]
if elements.contains(5) {
  //do something
}

当前回答

最简单的方法是在数组上使用过滤器。

let result = elements.filter { $0==5 }

如果元素存在,结果将显示已找到的元素;如果元素不存在,结果将为空。因此,简单地检查result是否为空将告诉您元素是否存在于数组中。我会使用以下方法:

if result.isEmpty {
    // element does not exist in array
} else {
    // element exists
}

其他回答

为Swift 2+更新

请注意,从Swift 3(甚至2)开始,下面的扩展不再需要,因为全局contains函数已经被做成了Array上的一对扩展方法,这允许你做以下任何一种:

let a = [ 1, 2, 3, 4 ]

a.contains(2)           // => true, only usable if Element : Equatable

a.contains { $0 < 1 }   // => false

Swift 1的历史答案:

使用这个扩展:(更新到Swift 5.2)

 extension Array {
     func contains<T>(obj: T) -> Bool where T: Equatable {
         return !self.filter({$0 as? T == obj}).isEmpty
     }
 }

使用:

array.contains(1)

数组

let elements = [1, 2, 3, 4, 5, 5]

检查元素是否存在

elements.contains(5) // true

获取元素索引

elements.firstIndex(of: 5) // 4
elements.firstIndex(of: 10) // nil

获取元素计数

let results = elements.filter { element in element == 5 }
results.count // 2

斯威夫特4/5

实现这一点的另一种方法是使用过滤器函数

var elements = [1,2,3,4,5]
if let object = elements.filter({ $0 == 5 }).first {
    print("found")
} else {
    print("not found")
}

在Swift 2.1中,nsarray有containsobject,可以像这样使用:

if myArray.containsObject(objectImCheckingFor){
    //myArray has the objectImCheckingFor
}

最简单的方法是在数组上使用过滤器。

let result = elements.filter { $0==5 }

如果元素存在,结果将显示已找到的元素;如果元素不存在,结果将为空。因此,简单地检查result是否为空将告诉您元素是否存在于数组中。我会使用以下方法:

if result.isEmpty {
    // element does not exist in array
} else {
    // element exists
}