具有潜在未定义索引的矢量访问

时间:2013-11-15 15:07:21

标签: scala

在Scala中,我有一个Grid,由二维Vectors表示。

现在我想定义一个方法来测试给定的rowcolumn是否属于Grid并且满足某个条件(在这种情况下,如果数字为{{ 1}})。

理想情况下,我想执行以下操作:

> 0

但是,如果索引超出g(row)(col) > 0 的范围,则会导致异常。

我想出的是:

Vector

有更好的方法吗?

可以找到完整的样本here

1 个答案:

答案 0 :(得分:2)

以下内容或多或少等同于您的内容,但(至少可以说是)更具惯用性:

def isGt0(g: Grid, row: Int, col: Int) =
  g.lift(row).flatMap(_.lift(col)).fold(false)(_ > 0)

这是有效的,因为Vector[A]是从IntA的部分功能。我们可以使用.lift方法将此作为IntOption[A]的总函数,如果我们超出界限,我们会得到None。我们使用flatMap来单独链接两个请求,fold执行检查是否存在值,否则返回false

但是,这些版本都不是非常有效,如果你这么做并且性能很重要,你可能需要检查简单的旧边界。