比较字典,同时排除某些键

南巴提

我有2本字典:

let foo: [String: Any] = ["name": "John", "isHuman": true, "age": 20]
let bar: [String: Any] = ["name": "Ann", "isHuman": true, "age": 34]

我想进行比较,同时从该比较中排除某些键。我要排除的键在另一本词典中:

let car: [String: Any] = ["age": 20]

我有这个扩展名:

extension Dictionary where Key: Equatable {
    func isEqualTo(_ dictionary: Dictionary, excluding: [Key] = []) -> Bool {
      let left = filter({ !excluding.contains($0.key) })
      let right = dictionary.filter({ !excluding.contains($0.key) })
      return NSDictionary(dictionary: left).isEqual(to: right)
    }
}

但是当我调用它时,我需要将排除的键包装在中Array,否则编译器将失败并显示:

无法将类型“ Dictionary.Keys”的值转换为预期的参数类型“ [String]”

foo.isEqualTo(bar, excluding: Array(car.keys)) 作品。

foo.isEqualTo(bar, excluding: car.keys) 导致编译器错误。

我是否可以通过某种方式调整扩展名,从而避免将排除的密钥包装在其中Array

马丁·R

car.keys具有type Dictionary<Key, Value>.Keys,它是一个集合而不是数组。

如果将函数声明为

func isEqualTo<C: Collection>(_ dictionary: Dictionary, excluding: C) -> Bool
        where C.Element == Key

然后两者

foo.isEqualTo(bar, excluding: Array(car.keys))
foo.isEqualTo(bar, excluding: car.keys)

编译和工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章