最終確認日
【メモ】配列に指定した要素からindexとその要素を返す機能を追加してみた【Swift】
ほとんどはこちらの記事で
Swiftのバージョンが変わっているので、filterの部分の書き方が変わっていてエラーが出てしまうのでメモ
import Foundation
extension Array {
    func findAll(includeElement: Element -> Bool) -> [(Int, Element)] {
        let seq = zip(0..<self.count, self)
        return seq.filter() { includeElement($0.1) }
    }
}
使う時
var array = ["おこめ","ごはん","ごはん","はくまい"]
var searchArray = array.findAll({$0 as! String == "ごはん"})
print(searchArray)
こんな感じでプリントアウトすると結果が[(1,ごはん),(2,ごはん)]となるはず
extensionとか使ったことなかったですが便利ですね。
filterのバージョンの違いはこちらを参考にさせていただきました
Equivalent way for doing this using Swift arrays
index番号のみをかえす場合
上記はindexと要素とがセットで返されますが、適当にindexのみ返されるようなのも作ってみました。
extension Array {
    func findIndex(includeElement: Element -> Bool) -> [Int] {
        var indexArray:[Int] = []
        for (index, element) in enumerate() {
            if includeElement(element) {
                indexArray.append(index)
            }
        }
        return indexArray
    }
}使う時は同様に
var array = ["おこめ","ごはん","ごはん","はくまい"]
let searchIndex = array.findIndex({$0 as! String == "ごはん"})
print(searchIndex)で結果は[1,2]
といった感じです。
その他参考にさせていただいた記事
Swiftのmap, filter, reduce(などなど)はこんな時に使う!
参考リンク
- 【Swift】Arrayに検索機能を追加する
- Equivalent way for doing this using Swift arrays
- Swiftのmap, filter, reduce(などなど)はこんな時に使う!
追記
(追記日: 2018-04-13)
ほぼほぼ変わってないけれど。
元記事ももしかしてSwift3なのかな、まだ2かな・・・わからん・・・ よく使います。

公開日
更新日