根据另一个数组的 id 检索数组

Retrieve array based on ids of another array

我有两个用户和波束数组

struct User {
   var id: Int
   var jobTitle: String
 }

struct Beams {
 var isSelected = false
 var id: Int
 var userIds: [Int]
}

如果用户 select 使用特定波束,则分配给该波束的所有用户都将 select 第一个数组。用户可以 select 多个波束,我从 api 响应中获取数据,我必须在 post 调用中发送 selected 用户。所以我必须 select 来自一组波束的所有 selected 用户,并根据过滤后的 ID,在 post 调用中发送该数组。最初我正在过滤所有像这样 selected 的光束

beams.filter { [=13=].isSelected }.compactMap { [=13=].userIDS }

这给了我一个 [Int] 数组。这些是必须发送的 userId。我不知何故无法弄清楚我如何 select 来自我的用户数组的这些特定 ID,这些 ID 也包含其他属性。 contains 可用于过滤一个元素而不是一个序列。即使我过滤或取这些 id 和我的 userArray 的交集。我还剩下一组或一组 ID。我必须从中生成我的数组,我也想保留所有其他属性。在正确方向上的任何帮助将不胜感激。我脑子里有这种性质的东西

   let selectedBeamsIds = beams.filter { [=11=].isSelected }.compactMap { [=11=].userIDS }
   users.append(selectedBeamsIds.compactMap { getUniqueUsersForBeams(ids: [=11=]) } )

  private func getUniqueUsersForBeams(ids: [Int]) -> [User] {

    let ower = users.reduce(into: [User]()) { (result, 
     user) in

      let filteredUserIds = ids.filter { [=11=] == user.id }
        //result.append(use)

    }
}

我还需要使用另一个 jobTitles 数组来执行此操作,例如

struct JobTitle {
 var jobTitle: String
 var isSelected = false
 }

这个很简单,就好像用户的职位与 [String] 数组的 selected 项相匹配,然后 select 要发送给该用户。

试试,

let selectedIds = beams.filter { (beams) -> Bool in
    beams.isSelected
}.flatMap { (beams) -> [Int] in
    beams.userIds
}

let filteredUsers = users.filter { (user) -> Bool in
    selectedIds.contains(user.id)
}

1 ) 过滤掉选定的波束

2 ) 收集所有选中的beams中的userIds

3 ) 通过检查 id 是否存在于之前收集的 id 中来过滤用户。