应用逻辑和布尔值列表

时间:2014-03-19 21:44:54

标签: scala boolean logical-operators fold

考虑以下Scala中的布尔值列表

List(true, false, false, true)

您如何使用foldRight或foldLeft模拟对列表中的所有值执行逻辑AND的功能?

4 个答案:

答案 0 :(得分:50)

您可以使用foldLeft/Right作为逻辑AND,或forall(identity)作为逻辑OR,而不是exists(identity)

编辑:这些功能的好处是提前退出。如果forall点击falseexists一个true,他们会立即返回。

答案 1 :(得分:11)

val l = List(true, false, false, true)
val andAll = l.foldLeft(true)(_ && _)

答案 2 :(得分:4)

我最喜欢forAll方法,只要它适合您的用例。它很早就退出了。但是,如果这不适合另一个,只是稍微复杂一点的方法。

使用reduceOption,您不会提前退出,但您可以清楚地指定列表为空的情况的值。

val l = List(true, false, false, true)
val andAll = l.reduceOption(_ && _).getOrElse(false)

答案 3 :(得分:3)

没有初始值,如foldLeft

List(true, false, false, true).reduce(_&&_)

然而,这不适用于List.empty[Boolean]