你可以采取的一个办法是只遍历所有向量:
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)
矢量也有zipWithIndex
方法,增加了索引到集合中的每个元素,并创建它们的元组。所以,你可以用它以存档同一件事:
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
。将不会执行进一步的搜索。
顺便说一句,我会命名项目查找为'x'或'z'或以某种方式除了'i'(i,j,k是索引) – 2013-05-12 11:28:32
也你的代码不能编译 – soulcheck 2013-05-12 11:31:32