在Scala中,我有一个Grid
,由二维Vectors
表示。
现在我想定义一个方法来测试给定的row
和column
是否属于Grid
并且满足某个条件(在这种情况下,如果数字为{{ 1}})。
理想情况下,我想执行以下操作:
> 0
但是,如果索引超出g(row)(col) > 0
的范围,则会导致异常。
我想出的是:
Vector
有更好的方法吗?
可以找到完整的样本here。
答案 0 :(得分:2)
以下内容或多或少等同于您的内容,但(至少可以说是)更具惯用性:
def isGt0(g: Grid, row: Int, col: Int) =
g.lift(row).flatMap(_.lift(col)).fold(false)(_ > 0)
这是有效的,因为Vector[A]
是从Int
到A
的部分功能。我们可以使用.lift
方法将此作为Int
到Option[A]
的总函数,如果我们超出界限,我们会得到None
。我们使用flatMap
来单独链接两个请求,fold
执行检查是否存在值,否则返回false
。
但是,这些版本都不是非常有效,如果你这么做并且性能很重要,你可能需要检查简单的旧边界。