根据另一个数组的 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 中来过滤用户。
我有两个用户和波束数组
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 中来过滤用户。