arrays - Swift 3.0 删除字典数组中的重复项

标签 arrays dictionary set swift3

我正在努力删除 swift 3.0 中字典数组中的重复字典

下面是

let Dict1 : [String : String] = ["messageTo":"Madhu"]
let Dict2 : [String : String] = ["messageTo":"Kiran"]
let Dict3 : [String : String] = ["messageTo":"Raju"]

var arrOfDict = [[String:String]]()
arrOfDict.append(Dict1)
arrOfDict.append(Dict2)
arrOfDict.append(Dict1)
arrOfDict.append(Dict3)
arrOfDict.append(Dict2
print(arrOfDict)

//prints [["messageTo": "Madhu"], ["messageTo": "Kiran"], ["messageTo": "Madhu"], ["messageTo": "Raju"], ["messageTo": "Kiran"]]

如您所见,arrOfDict 中有 2 个重复的字典。

任何人都可以帮我使用Set或任何其他方法过滤重复项

最佳答案

字典不符合Hashable(或Equatable),因此在这种情况下使用Set不是一个可用的方法。然而,对于 KeyValue 类型为 Equatable 的字典,我们可以轻松访问 == 运算符对字典数组执行唯一性过滤:

public func ==<Key : Equatable, Value : Equatable>(
            lhs: [Key : Value], rhs: [Key : Value]) -> Bool

例如如下 (O(n^2))

arrOfDict = arrOfDict.enumerated()
    .filter { (idx, dict) in !arrOfDict[0..<idx].contains(where: {$0 == dict}) }
    .map { $1 }

print(arrOfDict)
// [["messageTo": "Madhu"], ["messageTo": "Kiran"], ["messageTo": "Raju"]]

// or ...
arrOfDict = arrOfDict.enumerated()
    .flatMap { (idx, dict) in !arrOfDict[0..<idx].contains(where: {$0 == dict}) ? dict : nil }

关于arrays - Swift 3.0 删除字典数组中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41381075/

相关文章:

python - 将列表写入字典

Java Set<String> 相等忽略大小写

c - "Invisible"操作二维数组时出错。 (0 个错误,0 个警告)

C++ 将数组传递给函数

javascript - 如何在 native 客户端中的 Vardictonary 中接收从 javascript 发送的数组

javascript - OnClick 元素用 JS 填充数组

ios - 在 Swift 5 中从数组创建字典

python - 使用 python 字典时无法解压不可迭代的 int 对象

python - 播种 Python RNG 显示集合的非确定性行为

java - Python 相当于 Java 的 Set.add()?