【发布时间】:2016-06-07 16:41:06
【问题描述】:
我正在尝试拥有一个字典,其中字符串作为键,字符串数组作为值。
然后我想检查其中两个字典是否相等:
let dicOfStringStringAr1: [String : [String]] = ["key1" : ["val", "for key 1"]]
let dicOfStringStringAr2: [String : [String]] = ["key1" : ["val", "for key 1"]]
if dicOfStringStringAr1 == dicOfStringStringAr2 {
print("Dictionary of String Array")
}
但我得到这个错误:
错误:二元运算符 '==' 不能应用于两个 '[String : [String]]' 操作数
但是如果值是 String 而不是 [String] 它可以工作。
let dicOfStringAr1: [String : String] = ["key1" : "val"]
let dicOfStringAr2: [String : String] = ["key1" : "val"]
if dicOfStringAr1 == dicOfStringAr2 {
print("Dictionary of String Array")
}
我不明白这个问题。
有人可以解释是什么问题。
查看 Dictionary 的默认 == Swift 函数后
@warn_unused_result
public func ==<Key : Equatable, Value : Equatable>(lhs: [Key : Value], rhs: [Key : Value]) -> Bool
我意识到没有将值表示为数组的定义,并且“通用”值无法解析为集合。 (不知道为什么)。
所以我做了一个 == 函数,它有 [Key : [Value]] 参数。现在代码可以工作了。
@warn_unused_result
public func ==<Key : Equatable, Value : Equatable>(lhs: [Key : [Value]], rhs: [Key : [Value]]) -> Bool {
var result = lhs.count == rhs.count
for (k, v) in lhs {
guard let arValue = rhs[k] where result == true else {
result = false
break
}
result = v == arValue
}
return result
}
有人可以解释为什么在 Swift == 实现中 Value 不能解析为单个项目,即一个数组吗?
【问题讨论】:
标签: arrays swift dictionary equality