【Swift】条件にマッチした配列要素を取得する方法

配列内でマッチした全ての配列要素を取得する方法と、最初にマッチした要素のみを取得する方法の二つを紹介します。

マッチした全要素を取得

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
広告
広告