如何在Swift中合并两个自定义类型数组并删除重复的自定义类型项? [英] How to merge two custom type arrays and remove duplicate custom type items in Swift?
问题描述
我在Playgraound中有以下代码,该代码无法正常运行。
class对象:NSObject {
var va1:字符串? =零
var va2:整数? = nil
init(_ v1:字符串,_ v2:整数){
va1 = v1
va2 = v2
}
静态函数== (lhs:Obj,rhs:Obj)->布尔{{
guard lhs.va1 == rhs.va1 else {return false}
guard lhs.va2 == rhs.va2 else {return false}
返回true
}
}
var objArray1:[Obj] = [Obj( a,1),Obj( b,2),Obj( c,3)]
var objArray2:[Obj] = [Obj( a,1),Obj( b,2),Obj( d,4)]
objArray1 + = objArray2
objArray1 = Array(Set(objArray1))
但是objArray1将包含所有重复项。 / p>
我还检查了其他问题,例如:
从Swift的自定义对象数组中删除重复项。
但是,就我而言,我无法更改Obj的超类NSObject。 自定义类型必须是NSObject的子类。
问题:是否有任何优雅的方法可以实现合并两个自定义类型数组并删除重复的自定义键入项
我已根据@Hamish的评论和链接。
class对象:NSObject {
var va1:字符串? =零
var va2:整数? = nil
var值:Int
init(_ v1:字符串,_ v2:Int){
va1 = v1
va2 = v2
super .init()
}
覆盖var hashValue:Int {
var hashValueString = va1?
hashValueString + = \(va2 ?? 0)
返回hashValueString.hashValue
}
覆盖func isEqual(_ object:Any?) -> Bool {
如果让other = object as? Obj {
return self.hashValue == other.hashValue
} else {
return false
}
}
}
var objArray1:[Obj] = [Obj( a,1),Obj( b,2),Obj( c,3)]
var objArray2:[Obj] = [Obj( a,1),Obj( b,2),Obj( d,4)]
objArray1 + = objArray2
var objSet = Array(Set(objArray1) )
I have following code in Playgraound which doesn't work as I wish.
class Obj: NSObject {
var va1: String? = nil
var va2: Int? = nil
init(_ v1: String,_ v2: Int){
va1 = v1
va2 = v2
}
static func ==(lhs: Obj, rhs: Obj) -> Bool {
guard lhs.va1 == rhs.va1 else { return false }
guard lhs.va2 == rhs.va2 else { return false }
return true
}
}
var objArray1: [Obj] = [Obj("a", 1), Obj("b", 2), Obj("c", 3)]
var objArray2: [Obj] = [Obj("a", 1), Obj("b", 2), Obj("d", 4)]
objArray1 += objArray2
objArray1 = Array(Set(objArray1))
But the objArray1 will contains all duplicated items.
I have check other questions like :
Removing Duplicates From Array of Custom Objects Swift .
Remove duplicate objects in an array .
However, in my case, I can't change Obj's superclass NSObject. The custom type must be a subclass of NSObject.
Question: Is there any elegant way to achieve merge two custom type array and remove duplicate custom type items
I have resolved this issue based on @Hamish 's comment and the link .
class Obj: NSObject {
var va1: String? = nil
var va2: Int? = nil
var value : Int
init(_ v1: String,_ v2: Int){
va1 = v1
va2 = v2
super.init()
}
override var hashValue : Int {
var hashValueString = va1 ?? ""
hashValueString += "\(va2 ?? 0)"
return hashValueString.hashValue
}
override func isEqual(_ object: Any?) -> Bool {
if let other = object as? Obj {
return self.hashValue == other.hashValue
} else {
return false
}
}
}
var objArray1: [Obj] = [Obj("a", 1), Obj("b", 2), Obj("c", 3)]
var objArray2: [Obj] = [Obj("a", 1), Obj("b", 2), Obj("d", 4)]
objArray1 += objArray2
var objSet = Array(Set(objArray1))
这篇关于如何在Swift中合并两个自定义类型数组并删除重复的自定义类型项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!