比较Swift中Dictionary的相等性

时间:2019-04-11 11:42:49

标签: ios swift dictionary

嗨,我想比较两个Dictionary类型的[AnyHashable : Any],我已经回答了几个答案,但我不知道该如何实现。

例如,此链接上可接受的答案 How do I compare two dictionaries in Swift?

我在哪里编写给定的方法

public func ==<K, V: Hashable>(lhs: [K: V], rhs: [K: V] ) -> Bool {
    return (lhs as NSDictionary).isEqual(to: rhs)
}

我尝试在Dictionary Extension中声明它,但没有帮助

请不要将此标记为重复项,我已经给出了我要遵循的答案的链接,但这无济于事

2 个答案:

答案 0 :(得分:1)

您无法比较Any对象,因为它不符合Equatable协议。您只能比较类似[AnyHashable: Equatable]

的字典

答案 1 :(得分:1)

按照给定的代码

public func ==<K, V: Hashable>(lhs: [K: V], rhs: [K: V] ) -> Bool {
    return (lhs as NSDictionary).isEqual(to: rhs)
}

字典值应符合Hashable协议。在这种情况下,您无法将[AnyHashable: Any]==运算符进行比较。它将引发以下错误。

  

类型“任何”都不符合协议“平等”

因此,如果我们将字典设为[AnyHashable: AnyHashable],则可以使用默认的本机==运算符进行比较,如下所示。

var dict1: [AnyHashable: AnyHashable] = ["Average": 10.0]
var dict2: [AnyHashable: AnyHashable] = ["Average": 10.0]
if dict1 == dict2 {
    print("Equal")
} else {
    print("Not Equal")
}

输出:“等于”