Scala集合:Range和Tuple

Range

Range定义一个范围,指定开始、结束和步长,通常用于填充数据结构和遍历for循环。

object RangeDemo {
  def main(args: Array[String]): Unit = {
    // 使用方法to来创建Range(包含上限)
    for(n <- 1 to 5){
      println(n)
    }

    println("\n----------------------------")
    // 使用方法util来创建Range(不包含上限)
    for(n <- 1 until 5){
      println(n)
    }

    println("\n----------------------------")
    // 还可以指定步长
    for(n <- 1 to 21 by 4){
      println(n)
    }

    println("\n----------------------------")
    for(n <- 1 until 21 by 4){
      println(n)
    }

    println("\n----------------------------")
    for(n <- 'a' to 'c'){
      println(n)
    }

    println("\n----------------------------")
    // 读取值
    val r = 1 to 5
    // val r = 1.to(5)     // 等价
    println(r(0),r(1),r(2),r(3),r(4))

    println("\n----------------------------")
    // 使用Range创建一个连续序列
    val x = (1 to 10).toList
    x.foreach(println)
  }
}

Tuple

一个tuple(元组)是一个容器,用来存储两个或多个不同类型的元素。元组与List类似,大小和值不可变,它在创建以后不能被修改,但可以容纳不同数据类型。

可以通过两种方式创建元组:

  • 通过编写由一对括号包围的、包含用逗号分开的值;
  • 通过使用关系操作符(->);

例如:

val tuple = (1, false, "Scala")
println(s"${tuple._1}, ${tuple._2}, ${tuple._3}")

val tuple2 ="title" -> "Scala从入门到精通"
println(s"${tuple2._1}, ${tuple2._2}")

元组在我们想要将一组不相关的元素组织在一起时很有用。如果这些元素是相同类型,可以使用集合,比如数组或列表。如果元素是不同类型,但是是相关的,在这种情况下,元组可能更合适。

元组是不可迭代的,其目的只是作为能容纳多个值的容器。但在一个元组中的元素有一个基于1 的索引,可以通过索引访问元组中的元素。

下面的代码演示了访问元组中元素的语法:

val twoElements = ("10", true);
val threeElements = ("10", "harry", true);

val first = threeElements._1
val second = threeElements._2
val third = threeElements._3

下面的示例代码演示了元组的使用:

// 元组:容器,可以容纳多个不同类型的元素,不可改变,不可以迭代
// 主要应用场景:作为数据容器,在函数中做为返回值,可以一次返回多个值

val t1 = ("aa",3,3.45,true,'c')

// 获取其中的元素:基于1的位置索引
t1._1
t1._2
t1._3
t1._4
t1._5

println("----------")
val (a,b,c,d,e) = t1
a
b
c
d
e

《Flink原理深入与编程实战》