在Swift中,我如何检查数组中是否存在一个元素?Xcode并没有给出包含、包含或拥有的建议,快速搜索这本书也一无所获。知道怎么检查这个吗?我知道有一个方法找到返回索引号,但是否有一个方法返回一个布尔像ruby的#include??
我需要的例子:
var elements = [1,2,3,4,5]
if elements.contains(5) {
//do something
}
在Swift中,我如何检查数组中是否存在一个元素?Xcode并没有给出包含、包含或拥有的建议,快速搜索这本书也一无所获。知道怎么检查这个吗?我知道有一个方法找到返回索引号,但是否有一个方法返回一个布尔像ruby的#include??
我需要的例子:
var elements = [1,2,3,4,5]
if elements.contains(5) {
//do something
}
当前回答
在Swift 2.1中,nsarray有containsobject,可以像这样使用:
if myArray.containsObject(objectImCheckingFor){
//myArray has the objectImCheckingFor
}
其他回答
你可以为Array添加一个扩展:
extension Array {
func contains<T>(_ object: T) -> Bool where T: Equatable {
!self.filter {$0 as? T == object }.isEmpty
}
}
这可以用于:
if myArray.contains(myItem) {
// code here
}
如果用户发现特定的数组元素,则使用以下代码相同的整数值。
var arrelemnts = ["sachin", "test", "test1", "test3"]
if arrelemnts.contains("test"){
print("found") }else{
print("not found") }
Swift 4.2 + 通过下面的函数,可以很容易地验证实例是否是数组。
func verifyIsObjectOfAnArray<T>(_ object: T) -> Bool {
if let _ = object as? [T] {
return true
}
return false
}
甚至你也可以像下面这样访问它。如果对象不是数组,你将收到nil。
func verifyIsObjectOfAnArray<T>(_ object: T) -> [T]? {
if let array = object as? [T] {
return array
}
return nil
}
Swift 2、3、4、5:
let elements = [1, 2, 3, 4, 5]
if elements.contains(5) {
print("yes")
}
contains()是SequenceType的一个协议扩展方法(用于Equatable元素的序列),而不是一个全局方法 早些时候发布。
备注:
此contains()方法要求序列元素 采用平等协议,比较例如安德鲁斯的答案。 如果序列元素是NSObject子类的实例 那么你必须重写isEqual:,参见Swift中的NSObject子类:hash vs hashValue, isEqual vs ==。 还有另一种更通用的contains()方法,它不要求元素相等,并将谓词作为 参数,参见例如:测试Swift?数组中是否存在对象的简写。
Swift旧版本:
let elements = [1,2,3,4,5]
if contains(elements, 5) {
println("yes")
}
我用滤镜。
let results = elements.filter { el in el == 5 }
if results.count > 0 {
// any matching items are in results
} else {
// not found
}
如果你愿意,你可以把它压缩成
if elements.filter({ el in el == 5 }).count > 0 {
}
希望这能有所帮助。
Swift 2更新
为默认实现欢呼!
if elements.contains(5) {
// any matching items are in results
} else {
// not found
}