Scala 3 — 书籍

集合

语言

Scala 库有一组丰富的集合类,这些类有一组丰富的函数。集合类以不可变和可变形式提供。

创建列表

为了让你了解这些工作原理,这里有一些使用 List 类的示例,它是一个不可变的链表类。这些示例展示了创建已填充 List 的不同方式

val a = List(1, 2, 3)           // a: List[Int] = List(1, 2, 3)

// Range methods
val b = (1 to 5).toList         // b: List[Int] = List(1, 2, 3, 4, 5)
val c = (1 to 10 by 2).toList   // c: List[Int] = List(1, 3, 5, 7, 9)
val e = (1 until 5).toList      // e: List[Int] = List(1, 2, 3, 4)
val f = List.range(1, 5)        // f: List[Int] = List(1, 2, 3, 4)
val g = List.range(1, 10, 3)    // g: List[Int] = List(1, 4, 7)

List 函数

一旦你拥有了一个填充好的列表,以下示例展示了一些你可以调用的方法。注意这些都是函数式方法,这意味着它们不会改变它们调用的集合,而是返回一个包含更新元素的新集合。每行表达式的返回结果都显示在每行的注释中

// a sample list
val a = List(10, 20, 30, 40, 10)      // List(10, 20, 30, 40, 10)

a.drop(2)                             // List(30, 40, 10)
a.dropWhile(_ < 25)                   // List(30, 40, 10)
a.filter(_ < 25)                      // List(10, 20, 10)
a.slice(2,4)                          // List(30, 40)
a.tail                                // List(20, 30, 40, 10)
a.take(3)                             // List(10, 20, 30)
a.takeWhile(_ < 30)                   // List(10, 20)

// flatten
val a = List(List(1,2), List(3,4))
a.flatten                             // List(1, 2, 3, 4)

// map, flatMap
val nums = List("one", "two")
nums.map(_.toUpperCase)               // List("ONE", "TWO")
nums.flatMap(_.toUpperCase)           // List('O', 'N', 'E', 'T', 'W', 'O')

这些示例展示了如何使用“foldLeft”和“reduceLeft”方法对一系列整数求和

val firstTen = (1 to 10).toList            // List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

firstTen.reduceLeft(_ + _)                 // 55
firstTen.foldLeft(100)(_ + _)              // 155 (100 is a “seed” value)

Scala 集合类提供了更多的方法,它们在 集合章节API 文档 中进行了演示。

元组

Scala 元组是一种类型,它允许你轻松地将不同类型的集合放入同一个容器中。例如,给定这个 Person case 类

case class Person(name: String)

这是你创建一个包含 IntString 和自定义 Person 值的元组的方法

val t = (11, "eleven", Person("Eleven"))

一旦你拥有一个元组,你可以通过将它们绑定到变量或按数字访问它们来访问其值

t(0)   // 11
t(1)   // "eleven"
t(2)   // Person("Eleven")

你还可以使用这种提取器方法将元组字段分配给变量名

val (num, str, person) = t

// result:
// val num: Int = 11
// val str: String = eleven
// val person: Person = Person(Eleven)

当你想将异构类型的集合放入类似小集合的结构中时,元组非常有用。有关更多元组详细信息,请参阅 参考文档

此页面的贡献者