在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
}
当前回答
最简单的方法是在数组上使用过滤器。
let result = elements.filter { $0==5 }
如果元素存在,结果将显示已找到的元素;如果元素不存在,结果将为空。因此,简单地检查result是否为空将告诉您元素是否存在于数组中。我会使用以下方法:
if result.isEmpty {
// element does not exist in array
} else {
// element exists
}
其他回答
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")
}
以防有人试图找到一个indexPath是否在选定的(如在UICollectionView或UITableView cellForItemAtIndexPath函数):
var isSelectedItem = false
if let selectedIndexPaths = collectionView.indexPathsForSelectedItems() as? [NSIndexPath]{
if contains(selectedIndexPaths, indexPath) {
isSelectedItem = true
}
}
如果用户发现特定的数组元素,则使用以下代码相同的整数值。
var arrelemnts = ["sachin", "test", "test1", "test3"]
if arrelemnts.contains("test"){
print("found") }else{
print("not found") }
这是我的小扩展,我刚刚写来检查我的委托数组是否包含委托对象(Swift 2)。:)它也适用于值类型,就像一个符咒。
extension Array
{
func containsObject(object: Any) -> Bool
{
if let anObject: AnyObject = object as? AnyObject
{
for obj in self
{
if let anObj: AnyObject = obj as? AnyObject
{
if anObj === anObject { return true }
}
}
}
return false
}
}
如果你有一个想法如何优化这段代码,而不是让我知道。
像这样使用哈希表如何?
首先,创建一个“哈希映射”泛型函数,扩展Sequence协议。
extension Sequence where Element: Hashable {
func hashMap() -> [Element: Int] {
var dict: [Element: Int] = [:]
for (i, value) in self.enumerated() {
dict[value] = i
}
return dict
}
}
这个扩展将工作,只要数组中的项目符合Hashable,像整数或字符串,这里是用法…
let numbers = Array(0...50)
let hashMappedNumbers = numbers.hashMap()
let numToDetect = 35
let indexOfnumToDetect = hashMappedNumbers[numToDetect] // returns the index of the item and if all the elements in the array are different, it will work to get the index of the object!
print(indexOfnumToDetect) // prints 35
但现在,我们只检查元素是否在数组中。
let numExists = indexOfnumToDetect != nil // if the key does not exist
means the number is not contained in the collection.
print(numExists) // prints true