带if-else的Scala返回布尔值

带if-else的Scala返回布尔值,scala,function,set,boolean,Scala,Function,Set,Boolean,因此,我必须考虑以下情况: def check(): Boolean = { for ((digit1,digit2,digit3) <- SetOfDigits){ if ((1,2,5) == (digit1,digit2,digit3)) true else false } } val SetOfDigits = Set((0,2,3),(1,5,6),(7,10,2),(1,2,5)) def check()

因此,我必须考虑以下情况:

 def check(): Boolean = {
    for ((digit1,digit2,digit3) <- SetOfDigits){
      if ((1,2,5) == (digit1,digit2,digit3))
        true
      else
        false
}
  }

val SetOfDigits = Set((0,2,3),(1,5,6),(7,10,2),(1,2,5))
def check():布尔={

对于((digit1,digit2,digit3)您应该在true之前添加
return
语句,或者在第一次执行时添加
false

否则,您可以使用
yield
从每个子集收集结果(您将得到布尔值列表)

取决于您的期望值。如果要确保至少有个子集满足结果,则函数如下所示:

def check(): Boolean = {
    val s = for ((digit1,digit2,digit3) <- SetOfDigits) {
      if ((1,2,5) == (digit1,digit2,digit3))
        return true
    }
    false
  }
def check():布尔={

val s=for((digit1,digit2,digit3)我不同意V先生的解决方案,我宁愿建议您更改您的实现,这似乎是一种非常简单的处理方式:

scala> val SetOfDigits = Set((0,2,3),(1,5,6),(7,10,2),(1,2,5))
SetOfDigits: scala.collection.immutable.Set[(Int, Int, Int)] = Set((0,2,3), (1,5,6), (7,10,2), (1,2,5))

scala>   SetOfDigits.contains((1, 2, 5))
res0: Boolean = true

scala>   SetOfDigits.contains((1, 2, 4))
res1: Boolean = false
contains
在集合中查找一个元素,如果该元素不在那里,它将返回false,在我看来,这样会更好

作为对您评论的回应,我会将第一个列表展平,然后使用
forAll
contains

scala> val setOfDigits1 = Set((0,2,3),(1,5,6),(7,10,2),(1,2,5)).flatMap { case(a,b,c) => Set(a,b,c)}
setOfDigits1: scala.collection.immutable.Set[Int] = Set(0, 5, 10, 1, 6, 2, 7, 3)

scala>   val setOfDigits2 =  Set(1,2,3,16,20,7)
setOfDigits2: scala.collection.immutable.Set[Int] = Set(20, 1, 2, 7, 3, 16)

scala>   val setOfDigits3 =  Set(1,2,3,10)
setOfDigits3: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 10)

scala>   setOfDigits2.forall(i => setOfDigits1.contains(i))
res8: Boolean = false

scala>   setOfDigits3.forall(i => setOfDigits1.contains(i))
res9: Boolean = true

注意,我已经将第一个列表从
list[(Int,Int,Int)]
展平到
list[Int],然后<代码> FALL//COD>计算所有元素必须是真的谓词,<代码>包含其余的。< /P> < P> >,从<代码>中得到结果,如果“否则”/代码>,否则for Curror返回<代码>单元< /代码>。类似于@ EndoEuAPI的方法,也考虑

xs.exists( _ == (1,2,5) )
Boolean = true
这将在找到第一个匹配项时停止对集合的迭代


注:按照惯例,集合的标签以小写字母开头,即
setOfDigits
而不是
setOfDigits
,而类型和类则大写。

我同意Ende Neu的回答

在一般情况下,您可以引入一个布尔变量,您可以在内部检查该变量的理解情况以提前结束它。我更喜欢使用
return
关键字

def check(): Boolean = {
  var found = false
  for ((digit1,digit2,digit3) <- SetOfDigits if !found) {
    if ((1,2,5) == (digit1,digit2,digit3)) found = true
  }
  found
}
def check():布尔={
发现的var=false

对于((digit1,digit2,digit3)好的,我现在知道了,但我还有另一个问题!假设我的数字列表集包含像上面一样的元组,我想比较另一个包含:Set(1,2,3,16,20,7)…如果一组数字中的所有数字都在另一组中出现一次,那么我如何才能得出正确的结果,所以只检查那些同时包含并忽略其他数字的数字?@Bajro我做了一次编辑,答案太长,不适合注释。当你找到所需值时,浏览整个列表是糟糕的编程。正确,
return
不是惯用的Scala,但也不是可变变量。