我写了一个for循环来遍历Map,我希望这个函数在找到某个值时立即返回键(键和值都是Int类型)
var hs:Map[Int,Int] = Map(1 -> 1, 2 -> 2)
for ((k,v) <- hs) {
if (v == 1)
return k
}
Run Code Online (Sandbox Code Playgroud)
但是,scala 给我错误消息:
error: type mismatch;
found : Unit
required: Int
for ((k,v) <- hst)
^
one error found
Run Code Online (Sandbox Code Playgroud)
然后我改为
var result = 0
for ((k, v) <- hst){
if (v == 1)
result = k
}
result
Run Code Online (Sandbox Code Playgroud)
然后,效果很好。为什么第一个版本存在类型问题?
@D.Peter 解释了编译错误,它缺少returnfor 这个子句。
在Scala中,您可以使用find来执行此操作,例如:
hs.find(_._2 == 1).map(_._1).getOrElse(0) // get or return default value.
Run Code Online (Sandbox Code Playgroud)