在Scala中,x =>是什么x._1._1表示

时间:2017-09-21 03:10:32

标签: scala

在下面的代码片段中,我知道x._1表示元组的第一个元素,但我无法理解x._1._1代表什么。我对Scala不太熟悉对不起,如果这是一个相对天真的问题,谢谢!!

val a = b.groupBy(x=> x._1._1)

3 个答案:

答案 0 :(得分:1)

这是嵌套元组的REPL中的一个快速示例

scala> val t = ((1, 2), 3)
t: ((Int, Int), Int) = ((1,2),3) 

scala> t._1  // Get the first part of the tuple
res0: (Int, Int) = (1,2)

scala> t._2  // Get the second part of the tuple
res1: Int = 3

scala> t._1._1  // Get the first part of the first part
res2: Int = 1 

这是一个示例,其中包含一个演示groupBy

的序列
scala> val s = Seq(((1, 2), 3), ((1, 5), 6), ((2, 4), 32))
s: Seq[((Int, Int), Int)] = List(((1,2),3), ((1,5),6), ((2,4),32))

scala> s.groupBy
   def groupBy[K](f: (((Int, Int), Int)) => K): scala.collection.immutable.Map[K,Seq[((Int, Int), Int)]]

scala> s.groupBy(x => x._1._1)
res3: scala.collection.immutable.Map[Int,Seq[((Int, Int), Int)]] = Map(2 -> List(((2,4),32)), 1 -> List(((1,2),3), ((1,5),6)))

在这种情况下,第一个元素的第一个元素是分组的目标。以下是更容易查看格式的结果:

Map(
  2 -> List(
    ((2,4),32)), 
  1 -> List(
    ((1,2),3),
    ((1,5),6))
  )

答案 1 :(得分:0)

这意味着x._1本身就是一个元组。 例如:

val b = Seq((("subTuple_1", "subTuple_2"), "tuple_2"))
val a = b.groupBy(x=> x._1._1)

答案 2 :(得分:0)

正如您所提到的,._1为您提供了元组的第一列,如果第一列的结果是元组,则可以执行._1

例如

scala> Map(("a" -> "b") -> 100, ("c" -> "d") -> 200).map(_._1)
res31: scala.collection.immutable.Map[String,String] = Map(a -> b, c -> d)

scala> Map(("a" -> "b") -> 100, ("c" -> "d") -> 200).map(_._1._1)
res32: scala.collection.immutable.Iterable[String] = List(a, c)

GROUPBY,

scala> Map(("a" -> "b") -> 100, ("a" -> "c") -> 200).groupBy(_._1._1)
res19: scala.collection.immutable.Map[String,scala.collection.immutable.Map[(String, String),Int]] = Map(a -> Map((a,b) -> 100, (a,c) -> 200))