Swift 检查数组是否包含元素
我想知道为什么下面的方法不起作用:Swift 检查数组是否包含元素,swift,Swift,我想知道为什么下面的方法不起作用: var tmp = [AnyObject] () for (key, value) in dictionary{ if (tmp.contains(value)){ } tmp.append(value as AnyObject) } 看起来没有数组的方法.contain。它迫使我使用其他方法tmp.contains(其中:Bool#>) 但是我不想。我只想检查数组是否包含该特定对象 这是因为任何对象
var tmp = [AnyObject] ()
for (key, value) in dictionary{
if (tmp.contains(value)){
}
tmp.append(value as AnyObject)
}
看起来没有数组的方法.contain。它迫使我使用其他方法tmp.contains(其中:Bool#>)
但是我不想。我只想检查数组是否包含该特定对象 这是因为任何对象都不是可等分的对象。如果有AnyObject数组,则必须自己进行比较。例如,如果使用字符串数组或自定义类,则可以使用Sequence的contains()方法,这是因为AnyObject不是可等分的对象。如果有AnyObject数组,则必须自己进行比较。例如,如果您使用字符串数组或自定义类,那么您可以使用contains()方法的Sequence我建议从
AnyObject
切换到AnyHashable
(当然,如果可能的话),因为AnyHashable
是。您的代码如下所示:
var tmp = [AnyHashable]()
var dictionary: [Int: Any] = [1: "Hello1", 2: "Hello2", 3: "Hello3", 4: false, 5: 289 ]
for (key, value) in dictionary{
if tmp.contains(value as! AnyHashable){
continue
}
tmp.append(value as! AnyHashable)
}
希望有帮助 我建议从
AnyObject
切换到AnyHashable
(如果可能的话当然可以),因为AnyHashable
是。您的代码如下所示:
var tmp = [AnyHashable]()
var dictionary: [Int: Any] = [1: "Hello1", 2: "Hello2", 3: "Hello3", 4: false, 5: 289 ]
for (key, value) in dictionary{
if tmp.contains(value as! AnyHashable){
continue
}
tmp.append(value as! AnyHashable)
}
希望有帮助 词典是如何定义的?它包含什么样的值?您是否必须使用
AnyObject
?@MartinR函数定义为func是可转换的(indicate dictionary:[String:Int])->Bool,因此dictionary包含Int作为值。然后最简单的解决方案是将数组定义为var tmp=[Int]()
@MartinR是很酷,但这是一个研究案例,在现实世界中,我完全不知道数组中会有什么,那么使用Swift这样的语言的目的是什么呢?如果您可以在Obj-C中毫不费力地执行同样的操作。Objective-C中没有[String:Int]
字典。在Obj-C中,键和值都是NSObject的子类(在Swift中也可以使用)。字典是如何定义的?它包含什么样的值?您是否必须使用AnyObject
?@MartinR函数定义为func是可转换的(indicate dictionary:[String:Int])->Bool,因此dictionary包含Int作为值。然后最简单的解决方案是将数组定义为var tmp=[Int]()
@MartinR是很酷,但这是一个研究案例,在现实世界中,我完全不知道数组中会有什么,那么使用Swift这样的语言的目的是什么呢?如果您可以在Obj-C中毫不费力地执行同样的操作。Objective-C中没有[String:Int]
字典。在Obj-C中,键和值都是NSObject的子类(这也适用于Swift)。