arrays - 根据另一个数组的 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] 数组的选定项目匹配,然后选择要发送的用户。
解决方案
尝试,
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 中来过滤用户。
推荐阅读
- python - 在python中优化模式匹配
- sql - 将分钟舍入到小时和刻钟 (SQL)
- sql - Django 减少页面 SQL 查询(代码优化)
- revit-api - pyRevit WPF 非模态问题
- azureservicebus - Azure 服务总线异常 - MessageLockLostException:提供的锁无效。锁已过期,或消息已被删除
- angular - Angular 9 使用提供者扩展 ServiceProviderComponent
- go - 无论如何在ansi控制台上打印斜体字体?
- powershell - PowerShell 脚本 - 复制广告成员 o
- android - Firebase实时数据库android客户端在一小时后检测用户注销
- python - 使用类 python 组织类似的方法