Cod*_*er0 8 boolean scala function set
所以我必须遵循以下场景:
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))
Run Code Online (Sandbox Code Playgroud)
现在的问题是函数必须返回一个布尔值,但它总是告诉我这里的返回类型是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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
请注意,我已将第一个列表从a展平List[(Int, Int, Int)]为a List[Int],然后forAll计算一个谓词,该谓词必须对所有元素都为真,并contains完成其余的.
您应该return在 true 之前添加语句或false在第一次执行时停止。
否则,您可以用来yield收集每个子集的结果(您将获得布尔值列表)
取决于你的期望是什么。如果您想确保至少一个子集满足结果,您的函数将如下所示:
def check(): Boolean = {
val s = for ((digit1,digit2,digit3) <- SetOfDigits) {
if ((1,2,5) == (digit1,digit2,digit3))
return true
}
false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15554 次 |
| 最近记录: |