Arrays 从Swift字典中删除任何对象
我有一本字典:Arrays 从Swift字典中删除任何对象,arrays,swift,dictionary,Arrays,Swift,Dictionary,我有一本字典: var dict:[NSObject:[AnyObject]] 我想按值从字典中删除一个对象 func removeObject(anObject:AnyObject) { for key in dict.keys { dict[key] = dict[key]!.filter({$0 == anObject}) } } 但我得到了一个错误: Binary operator '==' cannot be applied to two 'AnyO
var dict:[NSObject:[AnyObject]]
我想按值从字典中删除一个对象
func removeObject(anObject:AnyObject) {
for key in dict.keys {
dict[key] = dict[key]!.filter({$0 == anObject})
}
}
但我得到了一个错误:
Binary operator '==' cannot be applied to two 'AnyObject' operands
移除此对象的最佳方法是什么?我希望尽可能保持它的通用性。如果您希望删除语义上等于
一个对象的对象,它和数组中的元素必须符合equalable
协议。将函数设置为通用函数,如下所示:
var dict = [NSObject:[AnyObject]]()
dict["key1"] = [1,2,3,"Hello world"]
dict["key2"] = [3,4,5]
func removeObject<T: Equatable>(anObject: T) {
for key in dict.keys {
dict[key] = dict[key]!.filter {
if let element = $0 as? T where element == anObject {
return false
} else {
return true
}
}
}
}
// Remove all number 3
removeObject(3)
print(dict)
这是因为当你将3.4和3.9转换为Int
时,它们在引用上是等价的吗?如果是这样,请使用==
。您无法比较任何对象
,因为第一个对象可能是圆圈
,第二个对象是长颈鹿
,您如何比较它们?如果您选择向下转换,然后根据您试图完成的任务,一个选项是使用NSObject:这似乎有效:func removeObject(anObject:AnyObject){for key in dict.keys{dict[key]=dict[key]!.filter({$0!==anObject}}}
您真的意思是==代码>?
dict["key1"] = [1, 2, 3]
dict["key2"] = [4, 3.4, 3.9]
removeObject(3.0) // 3.4 and 3.9 remain
removeObject(3) // 3.4 and 3.9 gone