如何在Swift中合并两个自定义类型数组并删除重复的自定义类型项? [英] How to merge two custom type arrays and remove duplicate custom type items in Swift?

查看:81
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆