2017-09-27 3 views
0

Ich habe zwei Array, das das gleiche Modell hat.Finden Sie das Objekt durch den Vergleich zweier Arrays

Ich versuche, das Objekt zu finden, wo es die gleiche ID hat. Ich habe diese Methode versucht, die ich es aber finden kann, wie ich es ohne for Schleife machen kann?

for item in userList { 

     let userSelection = user.list.first(where: {$0.id == item.id}) 
     item.approved = userSelection.approved 

     print(userSelection) 
    } 
+0

Sie versuchen, alle Elemente in 'userList' zu finden, die auch in' user.list' enthalten sind? –

+0

@IgorKulman Ja, das, was ich versuche zu erreichen. – CAN

+0

@CAN der Code, den Sie gepostet haben, würde nur das erste Vorkommen erhalten. Bitte aktualisieren Sie Ihre Frage und klären –

Antwort

0

Wenn Sie nicht über die Leistung kümmern, können Sie set.intersection verwenden:

let set1:Set<UserType> = Set(userList) 
let set2:Set<UserType> = Set(user.list) 
let commonItems = set1.intersection(set2)// Intersection of two sets 
1

Probieren Sie etwas wie dieses

let userSelection = user.list.filter({userList.map({$0.id}).contains({$0.id})}) 

Erläuterung:

//get all the ids from one list 
let ids = userList.map({$0.id}) 

//filter the second list by including all the users whose id is in the first list 
let userSelection = user.list.filter({ids.contains({$0.id})}) 
+0

Vielen Dank für Ihre Antwort, aber ich bekomme dieses Problem: Kann nicht den Wert von Nicht-Funktion Typ 'User' – CAN

+0

Ich habe es in 2 Teile aufgeteilt und beschrieben Grund Idee. Vielleicht müssen Sie Anpassungen an Ihrem Unterricht vornehmen, die Idee ist wichtig. –

0

Selbst wenn y unser Modell ist nicht hashbar, Sie können Sätze verwenden, um die Validierung durchzuführen:

Verwandte Themen