首页 > 解决方案 > 按条件快速过滤数组

问题描述

我的猫模型有这个:

var id: Int?

如果我有一组猫,我如何获得所有 id 为 7 的猫?我假设我应该使用过滤器方法:

let filteredCats = cats.filter(???)

标签: arraysswiftfilter

解决方案


除非您没有其他要求,否则它应该很简单。

cats.filter { $0.id == 7 }

并跳过可选值,您可以使用compactMap

例如

let array: [Cat] = [
    Cat(id: 7,   name: "CatA"),
    Cat(id: nil, name: "CatB"),
    Cat(id: 1,   name: "CatC"),
    Cat(id: 7,   name: "CatD"),
    Cat(id: 7,   name: "CatE"),
    Cat(id: 2,   name: "CatF"),
    Cat(id: nil, name: "CatG"),
]

print(array.compactMap { value -> Cat? in
    guard let id = value.id, id > 2 else { return nil }
    return value
})

推荐阅读