2016-12-09 3 views
2

У меня есть массив с объектами Contact внутри.swift 3 - удалить объекты из массива, которые существуют в другом массиве

Тогда у меня есть другой массив с пользователями.

class Contact: NSObject { 

    var name: String? 
    var phoneNumber: String? 
    var phoneNumberFormatted: String? 

    init(name: String, phoneNumber: String?, phoneNumberFormatted: String) { 
     self.name = name 
     self.phoneNumber = phoneNumber 
     self.phoneNumberFormatted = phoneNumberFormatted 
    } 
} 


class User: NSObject { 

     var name: String? 
    } 

Как удалить объект контакта с [Contact], если у меня есть пользователь в моем [User] с совпадающим именем?

Я знаю, как это сделать через петли, но что является самым эффективным способом?

+0

Объект 'PhoneNumber' имеет поле' phoneNumber'. Это не имеет большого значения, не так ли? – Alexander

+1

Я изменил имя объекта phoneNumber на Contact. Спасибо за вашу помощь @AlexanderMomchliov – Walker

+0

Имеет ли смысл, чтобы контакт не имел имени? – Alexander

ответ

0

Наилучший (наиболее эффективный с точки зрения вычисления) способ сделать это для нетривиальных размеров массива состоит в том, чтобы предварительно скопировать набор из массива, который необходимо повторно искать, и отфильтровать ваш другой массив, сохраняя элементы только в том случае, если они не найдены в комплекте.

Это повышает эффективность поиска O(1)Set. Алгоритм в целом O(userPhoneNumbers.count + contacts.count)

let userPhoneNumbers = Set(users.map{ $0.phoneNumber }) 
let filteredContacts = self.contacts.filter{ !userPhoneNumbers.contains($0.phoneNumber) } 
+0

Alex, я пытаюсь фильтровать по свойству объектов в обоих массивах. Ответ мне непонятен. Ум немного расширяется? Thanks man – Walker

+0

Вы знакомы с map/reduce/filter? – Alexander

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