【发布时间】:2020-03-15 04:42:30
【问题描述】:
我有一个包含所有用户数据的数组“users”,第二个数组“userIds”包含用户 ID。我必须使用“userIds”数组从“users”数组中获取用户
struct User {
let name: String
let id: Int
}
let users: [User] = [User(name: "a", id: 1),
User(name: "b", id: 2),
User(name: "c", id: 3),
User(name: "d", id: 4),
User(name: "d", id: 5)]
let userIds = [2,3,2,5]
我想要的结果数组是:
[User(name: "b", id: 2),
User(name: "c", id: 3),
User(name: "b", id: 2),
User(name: "d", id: 5)]
所以它可以根据“userIds”中的数据有重复的数据。
现在我尝试使用高阶函数filter:
let result = users.filter { (user) -> Bool in
return userIds.contains(user.id)
}
但这会删除重复的数据,输出是:
[User(name: "b", id: 2),
User(name: "c", id: 3),
User(name: "d", id: 5)]
我尝试过的一种方法是使用 for 循环:
var result = [User]()
for i in userIds {
result.append(users.filter({ $0.id == i }).first!)
}
它提供了所需的输出,但如果有更好的方法,请提出建议。
【问题讨论】:
-
循环对我来说似乎是一个很好的解决方案。这对我来说不是过滤,而是使用请求(array2)从源(array1)获取
-
感谢您的建议@JoakimDanielson。请看我添加的答案。
-
对于
array1,您可能应该使用结构而不是字典。否则,您将陷入强制转换、类型错误和崩溃的无底坑。 -
@Alexander-ReinstateMonica:它只是项目中的结构。为了提问,我在操场上创建了一个示例。