我正在努力删除 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
不是一个可用的方法。然而,对于 Key
和 Value
类型为 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/