【问题标题】:Convert an array of dictionaries into a set Swift 4将字典数组转换为集合 Swift 4
【发布时间】:2018-06-20 14:01:18
【问题描述】:

我有一个字典数组 ([[Double:Double]]),我想将其转换为字典的 Set。我的目标是使用.symmetricDifference 来查找两个数组之间的差异(两者都是[[Double:Double]] 类型)。我该怎么做?

我在 hackingwithswift.com 上找到 this 并尝试使用它,但我收到此错误:

类型'[[Double : Double]]'不符合协议'Hashable'

我也试过这个代码...

let array1:[[Double:Double]] = [[4.5:3.678], [6.7:9.2867], [7.3: 8.7564]]
let array2:[[Double:Double]] = [[4.5:3.678], [6.7:9.2867]]

let array3 = Set<[[Double:Double]]>(array1).symmetricDifference(Set(array2)) //On this line I get the error above. 

【问题讨论】:

  • 用您的实际相关代码更新您的问题。
  • 我已经更新了我的问题。 @rmaddy

标签: swift dictionary set swift4


【解决方案1】:

您不想要一组[[Double:Double]]。您想要一个 [Double:Double] 的集合,因为这些是数组 in 中的对象,而您希望它们是集合 in 中的对象。

因此,如果你简单地说,正确的事情就会发生

let array1:[[Double:Double]] = [[4.5:3.678], [6.7:9.2867], [7.3: 8.7564]]
let set1 = Set(array1)

等等。

可能需要您更新到更新版本的 Swift。它适用于 Swift 4.2。

【讨论】:

  • 仅供参考 - 我把它放到 Xcode 9.4 (Swift 4.1.2) 的操场上,得到了一堆错误。
  • 我在使用 swift 4.1 时也遇到了此代码的错误。我会尝试快速更新,看看会发生什么。如果有人有另一个适用于 swift 4.1 的想法,我很乐意。
  • 是的,字典在没有条件一致性的情况下是不可散列的,这是 4.2 的一个特性。
猜你喜欢
  • 2018-11-22
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2018-01-08
相关资源
最近更新 更多