配列内でマッチした全ての配列要素を取得する方法と、最初にマッチした要素のみを取得する方法の二つを紹介します。
マッチした全要素を取得
filter
関数で配列要素のフィルタリングが可能です。条件にマッチした要素のみが配列形式で返されます。
let ary = ["123", "123456", "123456789"]
ary.filter({ $0.characters.count < 7 }) // ["123", "123456"]
最初にマッチした要素を取得
filter
関数の結果から先頭要素をfirst
プロパティで取得する方法がお手軽です。
let ary = ["123", "123456", "123456789"]
ary.filter({ $0.characters.count < 7 })?.first // "123"
ary.filter({ $0.characters.count < 2 })?.first // nil
より高速な処理を求めたい場合はindexOf
メソッドを用いると良いです。
if let i = ary.indexOf({ $0.characters.count < 7}) {
ary[i] // "123
}
find
メソッドを独自に作成しておくと便利です。
extension CollectionType {
func find(includeElement:(Self.Generator.Element) -> Bool) -> Self.Generator.Element? {
if let i = indexOf(includeElement) { return self[i] }
return nil
}
}
let ary = ["123", "123456", "123456789"]
ary.find({ $0.characters.count < 7 }) // "123"
ary.find({ $0.characters.count < 2 }) // nil