【メモ】配列に指定した要素からindexとその要素を返す機能を追加してみた【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(などなど)はこんな時に使う!

2018/04/14追記 Swift4で。
ほぼほぼ変わってないけれど。


元記事ももしかしてSwift3なのかな、まだ2かな・・・わからん・・・
よく使います。
Swift
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS
more