Find whether two Swift Arrays contain the same elements

前端 未结 3 555
清歌不尽
清歌不尽 2020-12-22 11:41

I have two arrays

let a1 = [obj1, obj2, obj3]
let a2 = [obj3, obj2, obj1]

Assume that the array elements are custom objects which are

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-22 11:53

    If the items are unique and equatable (as in your example), convert to a Set and compare the Sets:

    let a1 = [1, 2, 3]
    let a2 = [3, 2, 1]
    Set(a1) == Set(a2)
    

    With some futzing, this can be made to work for an arbitrary class:

    class Person : NSObject {
        let name: String
        init(name:String) {self.name = name}
        override func isEqual(other: AnyObject?) -> Bool {
            return other is Person && (other as! Person).name == self.name
        }
        override var hashValue : Int {
            return self.name.hashValue
        }
    }
    
    let a1 = [Person(name:"Matt"), Person(name:"Sam")]
    let a2 = [Person(name:"Sam"), Person(name:"Matt")]
    Set(a1) == Set(a2)
    

提交回复
热议问题