Swift 从对象数组中删除重复项
Swift removing duplicate from array of object
我尝试将从我的服务器获得的 json 数据附加到对象数组,如果有任何重复项,我想删除它们
这是我的习惯class
class datastruct {
var id: Int?
var name: String?
init(add: NSDictionary) {
id = add["id"] as? Int
name = add["name"] as? String
}
}
这是我用来将 json 附加到数组
的代码
var data:Array< datastruct > = Array < datastruct >()
Alamofire.request(url)
.responseJSON{ response in
switch response.result {
case .success(let JSON):
if let list = JSON as? NSArray {
for i in 0 ..< list.count {
if let res = list[i] as? NSDictionary {
self.data.append(datastruct(add: res))
}
}
self.refresh()
}
case .failure(let error):
}
}
问题是我已经搜索了几个解决方案来删除 Whosebug 中的任何重复数组
但是当我尝试使用 Hashable
时,我不知道将 Set
放到我的代码中,因为它是 NSDictionary
请帮助我如何删除数组的重复项或给我一些提示
我认为这是解决这个问题的更简单的方法。
首先你的 datastruct
class 应该扩展 NSObject
。
然后在 datastruct
中添加 isEqual(_ object: Any?)
方法。像这样。
class datastruct : NSObject {
var id: Int?
var name: String?
init(add: NSDictionary) {
id = add["id"] as? Int
name = add["name"] as? String
}
override func isEqual(_ object: Any?) -> Bool {
let obj = object as! datastruct
if self.id == obj.id {
return true
} else {
return false
}
}
}
现在您可以检查重复项了。
if let res = list[i] as? NSDictionary {
let dataStructObj = datastruct(add: res)
if !data.contains(dataStructObj) {
self.data.append(dataStructObj)
}
}
希望对你有所帮助
我尝试将从我的服务器获得的 json 数据附加到对象数组,如果有任何重复项,我想删除它们
这是我的习惯class
class datastruct {
var id: Int?
var name: String?
init(add: NSDictionary) {
id = add["id"] as? Int
name = add["name"] as? String
}
}
这是我用来将 json 附加到数组
的代码 var data:Array< datastruct > = Array < datastruct >()
Alamofire.request(url)
.responseJSON{ response in
switch response.result {
case .success(let JSON):
if let list = JSON as? NSArray {
for i in 0 ..< list.count {
if let res = list[i] as? NSDictionary {
self.data.append(datastruct(add: res))
}
}
self.refresh()
}
case .failure(let error):
}
}
问题是我已经搜索了几个解决方案来删除 Whosebug 中的任何重复数组
但是当我尝试使用 Hashable
时,我不知道将 Set
放到我的代码中,因为它是 NSDictionary
请帮助我如何删除数组的重复项或给我一些提示
我认为这是解决这个问题的更简单的方法。
首先你的 datastruct
class 应该扩展 NSObject
。
然后在 datastruct
中添加 isEqual(_ object: Any?)
方法。像这样。
class datastruct : NSObject {
var id: Int?
var name: String?
init(add: NSDictionary) {
id = add["id"] as? Int
name = add["name"] as? String
}
override func isEqual(_ object: Any?) -> Bool {
let obj = object as! datastruct
if self.id == obj.id {
return true
} else {
return false
}
}
}
现在您可以检查重复项了。
if let res = list[i] as? NSDictionary {
let dataStructObj = datastruct(add: res)
if !data.contains(dataStructObj) {
self.data.append(dataStructObj)
}
}
希望对你有所帮助