我有一个二维集合(说Vector[Vector[Int]]
),我想找到它中的一个元素的索引。我的解决方案是这样的:查找二维集合中的元素(不含var)
def find(vec: Vector[Vector[Int]], target: Int) = {
def indexOfTarget(v: Vector[Int]) = v.indexOf(target)
val r = vec.indexWhere((v) => indexOfTarget(v) != -1)
val c = indexOfTarget(vec(r))
(r, c)
}
但它只是...丑陋。它会再次调用indexOfTarget
一次。
有没有更好的方法?
我同意,但也许应该提到的是,'view.zipWithIndex'是懒洋洋地评估,所以这应该是 - 足够高效。此外,这里不需要额外的'val idxs',因为find可以直接附加到映射上,如:'veq.view.zipWithIndex.map {case(sub,idx)=>(idx,sub.indexOf(target ))} .find(_._ 2!= -1)'。 也可以使用'Seq'而不是'Vector'。 – 2013-05-08 06:03:27
@michael_s感谢您的评论。据此编辑。 – gzm0 2013-05-08 15:30:03