【メモ】配列に指定した要素から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

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS
more