ほとんどはこちらの記事で
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かな・・・わからん・・・ よく使います。
コメントはありません。
現在コメントフォームは工事中です。