所以我必须遵循以下场景:
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))
现在的问题是函数必须返回一个布尔值,但它总是告诉我这里的返回类型是Unit
?该函数应该迭代SetOfDigits
,如果它找到相同的东西,(1,2,5)
它应该返回true,否则为false?有没有人能够解决这个问题以及为了让它运转起来我必须做些什么?
我不同意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
请注意,我已将第一个列表从a展平List[(Int, Int, Int)]
为a List[Int]
,然后forAll
计算一个谓词,该谓词必须对所有元素都为真,并contains
完成其余的.