值(x,y)与x._1,y._1的表示

时间:2016-07-21 17:44:37

标签: scala apache-spark

我是新手使用scala激发并且在某些情况下非常混淆符号(x,y)和x._1,y._1。特别是当它们在火花变换中一个接一个地使用时

有人可以解释是否有一个特定的经验法则来确定何时使用这些语法

2 个答案:

答案 0 :(得分:2)

基本上有两种方法可以访问匿名函数中的元组参数。它们功能相同,使用您喜欢的任何方法。

  1. 通过属性_1_2,...
  2. 通过模式匹配到具有有意义名称的变量

    val tuples = Array((1, 2), (2, 3), (3, 4))
    
    // Attributes
    tuples.foreach { t => 
      println(s"${t._1} ${t._2}")
    }
    
    // Pattern matching
    tuples.foreach { t =>
      t match {
        case (first, second) =>
          println(s"$first $second")
      }
    }
    
    // Pattern matching can also written as
    tuples.foreach { case (first, second) =>
        println(s"$first $second")
    }
    

答案 1 :(得分:1)

符号(x, y)是2个元素的{strong>元组,xy。 getScala元组示例和语法有不同的方法可用于元组中的各个值。您可以使用._1._2表示法来获取元素:

val tup = (3, "Hello")    // A tuple with two elements

val number = tup._1       // Gets the first element (3) from the tuple
val text = tup._2         // Gets the second element ("Hello") from the tuple

您还可以使用模式匹配。提取这两个值的一种方法是这样的:

val (number, text) = tup

与集合(例如,List)不同,元组具有固定数量的值(它并不总是两个值),并且值可以具有不同的类型(例如{{ 1}}和上面示例中的Int

有许多关于Scala元组的教程,例如:Scala tuple examples and syntax