首页 > 解决方案 > 根据另一个数组的 id 检索数组

问题描述

我有两个用户和梁阵列

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

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

如果用户选择了一个特定的波束,则分配给该波束的所有用户都将从第一个阵列中选择。用户可以选择多个光束,我从 api 响应中获取数据,我必须在电话后发送选定的用户。所以我必须从一组光束中选择所有选定的用户,并根据过滤后的 id,在电话后发送该数组。最初我正在过滤所有像这样选择的光束

beams.filter { $0.isSelected }.compactMap { $0.userIDS }

这给了我一个 [Int] 数组。这些是必须发送的用户 ID。我不知道如何从包含其他属性的用户数组中选择这些特定的 id。contains 可用于过滤一个元素,但不能过滤序列。即使我过滤或取这些 id 和我的 userArray 的交集。我仍然留下一组或一组 id。我必须从中生成我的数组,我也想保留所有其他属性。任何正确方向的帮助将不胜感激。我脑子里有这种性质的东西

   let selectedBeamsIds = beams.filter { $0.isSelected }.compactMap { $0.userIDS }
   users.append(selectedBeamsIds.compactMap { getUniqueUsersForBeams(ids: $0) } )

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

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

      let filteredUserIds = ids.filter { $0 == user.id }
        //result.append(use)

    }
}

我还需要使用另一个 jobTitles 数组来做到这一点,就像

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

这很简单,就好像用户的 jobTitle 与 [String] 数组的选定项目匹配,然后选择要发送的用户。

标签: arraysswiftcollectionssetsequence

解决方案


尝试,

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 中来过滤用户。


推荐阅读