2017-02-15 4 views
0

との配列を取得します配列にはcodeObj.codeが等しいObj2のみが含まれています。 Equatableプロトコルを含むことはこれを助けるでしょうか?は、私は私の二つのオブジェクト(Obj1と& OBJ2)は以下のように定義している同様のプロパティのオブジェクト

私はこれを試してみました:

let filteredArray = array1.filter({ (c1: Obj2) -> Bool in 
       return conversion2.contains(where: { (c2: Obj2) -> Bool in 
        return c1.codeObj.code == c2.codeObj.code; 
       }) 
      }) + array2.filter({ (c2: Obj2) -> Bool in 
       return conversion1.contains(where: { (c1: Obj2) -> Bool in 
        return c1.codeObj.code == c2.codeObj.code; 
       }) 
      }) 

はこれを簡素化する方法はありますか?

+0

しかし、何に等しい? 'Obj'の乗算に同じコードがあるとどうなりますか?例えば、このコードを '' "aaa"、 "aba"、 "aaa"、 "aba"、 "abc"、 "xyz"、ard "]'という複数の 'Obj'を持つ場合の出力は?出力は '[" aaa "、" aaa "、" aba "、" aba "]'? – mhergon

+0

そして 'Obj1'はクラスなので、等しく、同一であることを区別する必要があります –

+0

' [Obj2] in配列にはどのようなコードのObj.codeが等価で等しいObj2しか含まれていないのですか? – Alexander

答えて

0

私のための唯一の方法は、次のようにオブジェクトへequatableを追加します

class Obj1: NSObject { 
    var code : String 

    init(code: String) { 
     self.code = code 
    } 

    static func ==(lhs: Obj1, rhs: Obj1) -> Bool { 
     return lhs.code == rhs.code 
    } 

} 


class Obj2: NSObject { 
    var codeObj : Obj1 
    var value : Double 

    init(obj: Obj1, value: Double) { 
     self.codeObj = obj 
     self.value = value 
    } 

    static func ==(lhs: Obj2, rhs: Obj2) -> Bool { 
     return lhs.codeObj == rhs.codeObj 
    } 

} 

そして、例えば使用し、対等のためにフィルタリングする:

// Test objects 
let obj1A = Obj1(code: "aaa") 
let obj1B = Obj1(code: "aba") 
let obj1C = Obj1(code: "aaa") 
let obj1D = Obj1(code: "cca") 
let obj1E = Obj1(code: "aba") 
let obj1F = Obj1(code: "xca") 

let obj2A = Obj2(obj: obj1A, value: 12.0) 
let obj2B = Obj2(obj: obj1B, value: 12.0) 
let obj2C = Obj2(obj: obj1C, value: 23.0) 
let obj2D = Obj2(obj: obj1D, value: 46.0) 
let obj2E = Obj2(obj: obj1E, value: 23.0) 
let obj2F = Obj2(obj: obj1F, value: 4.0) 

var array = [obj2A, obj2B, obj2C, obj2D, obj2E, obj2F] 

var onlyEqual = [Obj2]() 
for object in array { 
    let count = array.filter({ $0 == object }).count 
    if count > 1 { 
     onlyEqual.append(object) 
    } 
} 

onlyEqualが含まれています

aaa 
aba 
aaa 
aba 
関連する問題