あなたが取ることができる1つのアプローチは、すべてのベクトルを繰り返すことです:
def searchVectors(x: Int, vec: Vector[Vector[Int]]) =
for {
i <- 0 until vec.size
j <- 0 until vec(i).size
if vec(i)(j) == x
} yield (i, j)
VectorzipWithIndex
には、コレクションの各要素にインデックスを追加し、それらのタプルを作成するメソッドもあります。したがって、同じものをアーカイブするために使用できます。
def searchVectors(x: Int, vec: Vector[Vector[Int]]) =
for {
(subVec, i) <- vec.zipWithIndex
(elem, j) <- subVec.zipWithIndex
if elem == x
} yield (i, j)
このアプローチの利点は、外部 (インデックスベース) ループの代わりに、map
/を使用して内部ループを使用していることですflatMap
。ビューと組み合わせる場合は、遅延検索を実装できます。
def searchVectors(x: Int, vec: Vector[Vector[Int]]) =
for {
(subVec, i) <- vec.view.zipWithIndex
(elem, j) <- subVec.view.zipWithIndex
if elem == x
} yield (i, j)
結果のコレクションを受け取ることはできませんが、これは遅延コレクションです。したがって、次のような頭を取る場合:
searchVectors(3, vector).headOption
実際に検索を実行し (この時点でのみ)、見つかった場合は として返されOption
ます。これ以上の検索は実行されません。