【Swift】配列のfilterされたindexを取得する方法

やりたいこと

配列からfilterで特定の文字列が含まれる配列を抽出したとき、元配列のどのindexか知りたい

方法

下記の方法を利用しました。
(もしかしたらスマートな方法ではないのかもしれません。)

let items = ["A", "B", "A", "C", "A", "D"]
let filteredIndices = items.indices.filter {items[$0] == "A"}  // [0, 2, 4]

おそらくよりスマートなのは下記の方法だと思います。
ただし、私は下記を完全に理解できているわけではなかったため、今回は使用していません。
後ほど復習したいと思います。

extension Array where Element: Equatable {
    func indexes(of element: Element) -> [Int] {
        return self.enumerated().filter({ element == $0.element }).map({ $0.offset })
    }
}
items.indexes(of: "A") // [0, 2, 4]
items.indexes(of: "B") // [1]

参考にしたページ

下記英語ページを参考にしました。

Swift - How to get indexes of filtered items of array
let items: = items.whatFunction("A") // -> items.whatFunction("B") // -> Does Swift 3 support a function like whatFunction(_: Element)?...

コメント

タイトルとURLをコピーしました