2017-09-27 45 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 
}