在Swift中比较Dictionary的相等性[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

嗨,我想比较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中声明它,但它没有帮助

请不要将此标记为重复我已经给出了我想要遵循的答案的链接,但它没有帮助

ios swift dictionary
2个回答
1
投票

你无法比较Any对象,因为它不符合Equatable协议。您只能比较像:[AnyHashable: Equatable]这样的词典


1
投票

根据给定的代码

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

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

类型'Any'不符合协议'Equatable'

因此,如果我们将字典作为[AnyHashable: AnyHashable],您可以使用默认的原生== opeartor进行比较,如下所示。

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

输出:“平等”

© www.soinside.com 2019 - 2024. All rights reserved.