2017-02-15 18 views
0

у меня есть мои два объекта (Obj1 & obj2) определяется следующим образом:Получить массив объектов аналогичного свойства

class Obj1: NSObject { 
    var code : String 

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


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

    init(primary: Currency, value: Double) { 
    self.primary = primary 
    self.value = value 
    } 
} 

У меня есть массив obj2, и я пытаюсь обновить массив [Obj2] в такой что массив содержит только Obj2, codeObj.code равны. Будет ли включать в него помощь Equableable?

Я попытался это:

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» на тот же код? Например, что такое вывод, если у вас есть несколько 'Obj' с этими кодами' ["aaa", "aba", "aaa", "aba", "abc", "xyz", ard "]'? output be '[" aaa "," aaa "," aba "," aba "]'? – mhergon

+0

И поскольку 'Obj1' - это класс, вам нужно провести различие между равными и одинаковыми. –

+0

' [Obj2] в таких способ, в котором массив содержит только Obj2, codeObj.code равны «равным»? – 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 

 Смежные вопросы

  • Нет связанных вопросов^_^