使用带结构的过滤器
通常,你可能希望过滤结构和其他复杂数据类型。在结构数组中搜索包含特定值的条目是一项非常常见的任务,并且可以使用函数式编程功能在 Swift 中轻松实现。更重要的是,代码非常简洁。
struct Painter {
enum Type { case Impressionist, Expressionist, Surrealist, Abstract, Pop }
var firstName: String
var lastName: String
var type: Type
}
let painters = [
Painter(firstName: "Claude", lastName: "Monet", type: .Impressionist),
Painter(firstName: "Edgar", lastName: "Degas", type: .Impressionist),
Painter(firstName: "Egon", lastName: "Schiele", type: .Expressionist),
Painter(firstName: "George", lastName: "Grosz", type: .Expressionist),
Painter(firstName: "Mark", lastName: "Rothko", type: .Abstract),
Painter(firstName: "Jackson", lastName: "Pollock", type: .Abstract),
Painter(firstName: "Pablo", lastName: "Picasso", type: .Surrealist),
Painter(firstName: "Andy", lastName: "Warhol", type: .Pop)
]
// list the expressionists
dump(painters.filter({$0.type == .Expressionist}))
// count the expressionists
dump(painters.filter({$0.type == .Expressionist}).count)
// prints "2"
// combine filter and map for more complex operations, for example listing all
// non-impressionist and non-expressionists by surname
dump(painters.filter({$0.type != .Impressionist && $0.type != .Expressionist})
.map({$0.lastName}).joinWithSeparator(", "))
// prints "Rothko, Pollock, Picasso, Warhol"