2017-09-27 80 views
0

我有兩個數組,它們有相同的模型。通過比較兩個數組來找到對象

我試圖找到它具有相同ID的對象。我試過這種方法,我可以找到它,但我怎麼可以讓它沒有循環?

for item in userList { 

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

     print(userSelection) 
    } 
+0

您是否試圖找到'userList'中包含在'user.list'中的所有項目? –

+0

@IgorKulman是的,我試圖達到。 – CAN

+0

@CAN您發佈的代碼只會獲得第一次發佈。請更新您的問題並澄清 –

回答

0

如果你不關心性能,你可以使用set.intersection

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

嘗試是這樣的

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

說明:

//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

感謝您的回覆,但我收到此問題: 無法調用非功能類型'用戶'的值 – CAN

+0

我將其分成2部分並描述了大概的概念。也許你將不得不在你的課堂上做出調整,這個想法很重要。 –

0

即使如果y我們的模型不是Hashable,你可以使用集合來執行驗證:

if Set(userList.map{$0.id}).subtracting(user.list.map{$0.id}).count == 0 
{ 
    // all entries in userList exist in user.list 
} 
else 
{ 
    // at least one entry of userList is not in user.list 
}