2016-07-12 2 views
1

у меня есть два массива из двух разных объектовсоюза двух массив из двух различных объектов

объект 1:

Class partner { 
    var pImage: String? 
    var pTimeStamp: NSDate? 
    var pTitle: String? 
    var ID: String? 
} 

объекта 2:

Class customer { 
    var cImage: String? 
    var cTimeStamp: NSDate? 
    var cTitle: String? 
    var ID: String? 
    var isCustomer : Bool? 
} 

Я хочу создайте array (эффективным способом, из-за курса) из этих двух arrayobjects, что никакое партнер и клиент объект с таким же ID (ИДС, Pid) не должны повторяться в новом Array. В принципе объединение этих двух массивов на основе идентификаторов. Пожалуйста, помогите.

EDIT:эти объекты хранятся в CoreData и в то время я хочу выше желаемого результата я уже два массива из этих объектов

+1

В основном ваши два класса имеют почти одинаковые свойства, почему бы не использовать наследие для этого? –

+0

@ReinierMelian ok, если у вас есть базовый класс, как это может мне помочь? – Suryakant

ответ

1

супер-умный способ будет сделать Set делать все работа для вас. Чтобы эти объекты применяли общий протокол с свойством ID. Определите равенство для этого протокола, чтобы иметь одинаковое значение ID. Теперь, если вы не заботитесь о порядке, принудите массивы к наборам и объедините множества. Если вы позаботились о заказе, вам придется использовать NSOrderedSet. Вы можете принудительно вернуться к массиву после выполнения операции объединения.

Альтернативой («тупой» способ) является циклическое перемещение по массивам, построение словаря, ключ которого является значением идентификатора. Подобно набору, основанному на равенстве идентификаторов, это предотвращает повторение, которое вы пытаетесь избежать. Это неэффективно, потому что вы выполняете только циклический переход через каждый массив, а поиск словарного ключа выполняется быстро. Когда вы построили словарь, вернитесь к массиву. Опять же, вы потеряете исходный порядок массива, если не примете дополнительных мер.

(оба эти ответа, однако, предполагают, что вы готовы изменить свои объекты, чтобы они могли жить даже в общей коллекции, поскольку они стоят, они не могут, поскольку они представляют собой два несвязанных типа.)

+0

Мне действительно нужен заказ. Я хочу, чтобы объект клиента сверху, любой фрагмент кода, если вы можете делиться – Suryakant

+0

Возможно, вам будет легче с этим, если вы сможете немного переосмыслить свои объекты ... – matt

+0

Да, я могу реструктурировать эти объекты, но на этом этапе продукта «нет» я не могу. – Suryakant

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