你可以採取的一個辦法是隻遍歷所有向量:
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