scala - 在 Scala 中使用 case 语句破坏元组的规则

标签 scala

我有以下代码:

val xs = List(('a', 1), ('a', 2), ('b', 3), ('b', 4))

我想把它转换成 map 。例如Map('a' -> Seq(1,2), 'b' -> Seq(3,4)) .所以我继续编写转换:
xs.groupBy(_._1) map {
  case (k, v) => (k, v.map(_._2))
}

为什么map后面的大括号需要是{ .当我开始时,我认为我可以做到以下几点:
xs.groupBy(_._1).map(case (k, v) => (k, v.map(_._2)))

但这不能编译。

最佳答案

因为 .map method accepts a function

你实际上写的是

map({
  case (k, v) => (k, v.map(_._2))
})

{ case (k, v) => (k, v.map(_._2)) }是模式匹配匿名函数( SLS ,第 8.5 节)的快捷方式定义,即 one of the function kinds :
val isOdd: PartialFunction[Int, String] = {
   case x if x % 2 == 1 => x+" is odd"
}

val upcastedIsOdd: Function[Int, String] = {
   case x if x % 2 == 1 => x+" is odd"
}

您不能省略大括号(因此您将失去部分功能和模式匹配的 nicity),但您可以跳过普通大括号(并仍然保留部分功能),就像在下面的代码段中一样:
scala> List(1,2,3).take(1)
//res0: List[Int] = List(1)
scala> List(1,2,3) take 1
//res1: List[Int] = List(1)

关于scala - 在 Scala 中使用 case 语句破坏元组的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131568/

相关文章:

java - 我可以在 Play Framework 2 中使用 specs2 测试 Java Controller 吗?

scala - run-main-0) scala.ScalaReflectionException : class java. sql.Date in JavaMirror with ClasspathFilter(

performance - 如何在 Scala 中近似数据结构的大小?

scala - Scala 中辅助函数的命名方案

scala - 为什么有些集合类除了类方法之外还有一个 "empty"实例方法?

scala - 通过使用 sumInts 方法理解 scala 替换模型

scala - 如何使用 Scala 生成 avro 文件

scala - Scala 序列的通用函数,如 `Seq` 、 `IndexedSeq` 、 `List`

scala - 如何处理spark中的错误SPARK-5063

Java/scala 正则表达式模式不替换字符串