うるおいらんど

【メモ】配列に指定した要素からindexとその要素を返す機能を追加してみた【Swift】

Swift

追記があります。

ほとんどはこちらの記事で

【Swift】Arrayに検索機能を追加する

 

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(などなど)はこんな時に使う!

参考リンク

Additional Notes追記

Swift4で。

ほぼほぼ変わってないけれど。

元記事ももしかしてSwift3なのかな、まだ2かな・・・わからん・・・ よく使います。

Comments

コメントはありません。

現在コメントフォームは工事中です。