Chr*_*ris 3 arrays nsarray ios swift
两个方面的问题:
var array = [1,2,3,4,5]
contains(array, 0) // false
var array2: NSArray = [1,2,3,4,5]
array2.containsObject(4) // true
Run Code Online (Sandbox Code Playgroud)
有没有办法搜索一个数组超过1的值?即.我可以在下面写下来搜索数组中的多个值,如果找到任何值,则返回true吗?问题的第二部分是我如何为NSArray做到这一点?
var array = [1,2,3,4,5]
contains(array, (0,2,3)) // this doesn't work of course but you get the point
Run Code Online (Sandbox Code Playgroud)
一种选择是使用a Set作为搜索词:
var array = [1,2,3,4,5]
let searchTerms: Set = [0,2,3]
!searchTerms.isDisjointWith(array)
Run Code Online (Sandbox Code Playgroud)
(你必须否定其中的值isDisjointWith,因为false当至少找到一个术语时它会返回.)
请注意,您还可以扩展Array为此添加简写:
extension Array where Element: Hashable {
func containsAny(searchTerms: Set<Element>) -> Bool {
return !searchTerms.isDisjointWith(self)
}
}
array.containsAny([0,2,3])
Run Code Online (Sandbox Code Playgroud)
至于NSArray,您可以使用其版本contains来确定匹配:
var array2: NSArray = [1,2,3,4,5]
array2.contains { searchTerms.contains(($0 as! NSNumber).integerValue) }
Run Code Online (Sandbox Code Playgroud)
闭包语法的解释(在注释中请求):()如果它是最后一个参数,你可以将闭包放在方法调用之外,如果它是唯一的参数,你可以()完全省略它.$0是闭包的第一个参数的默认名称($1将是第二个,等等).return如果闭包只是一个表达式,则可以省略.长期等价物:
array2.contains({ (num) in
return searchTerms.contains((num as! NSNumber).integerValue)
})
Run Code Online (Sandbox Code Playgroud)
您可以将包含与第二个数组链接在一起:
// Swift 1.x
contains(array) { contains([0, 2, 3], $0) }
// Swift 2 (as method)
array.contains{ [0, 2, 3].contains($0) }
// and since Xcode 7 beta 2 you can pass the contains function which is associated to the array ([0, 2, 3])
array.contains([0, 2, 3].contains)
// Xcode 12
array.contains(where: [0, 2, 3].contains)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2766 次 |
| 最近记录: |