★ クロージャに指定した条件を満たす要素からなる新しい配列を返す関数
let numList = [1 ,2 ,3 ,4 ,5]
// 偶数のみを抽出して返す
let evenList = numList.filter {(val:Int) -> Bool in
return val % 2 == 0
}
//=> evenList = [2,4]
// ※ 上記を省略したコード
let evenList = numList.filter{$0 % 2 == 0}
// ---------------------------------------------
// 抽出条件:偶数で3未満
let evenList = numList.filter{$0 % 2 == 0}.filter{$0 < 3}
//=> 2
★ Dictonary型をfilter処理する
let dic = ["a" : 1, "b": 2]
let filterDic = dic.filter() {
$0.1 % 2 == 0
}
filterDic
//=> [(.0 "b", .1 2)] タプルとして返却される
★ 2つのstructのプロパティを比較して2つ目のプロパティが1つ目のプロパティに含まれていないものを抽出する
import Foundation
struct A {
var value: String
init(_ value: String) {
self.value = value
}
}
struct Z {
var value: String
init(_ value: String) {
self.value = value
}
}
var a = [A("1"), A("2"), A("3"), A("4"), A("5")]
var z = [Z("2"), Z("4")]
let result = a.filter { !z.map{ $0.value }.contains($0.value) }
//=> [A(value: "1"), A(value: "3"), A(value: "5")]