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)
这是你创建一个包含 Int
、String
和自定义 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)
当你想将异构类型的集合放入类似小集合的结构中时,元组非常有用。有关更多元组详细信息,请参阅 参考文档。
此页面的贡献者
内容
- 简介
- Scala 特性
- 为什么是 Scala 3?
- Scala 初体验
- Hello, World!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一等函数
- 单例对象
- 集合
- 上下文抽象
- 顶层定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- 面向对象建模
- 面向函数建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 扩展
- 高阶函数
- 编写你自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数即值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 交集类型
- 联合类型
- 代数数据类型
- 协变
- 不透明类型
- 结构类型
- 相关函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文边界
- 给定导入
- 类型类
- 多重相等
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发人员的 Scala
- 面向 JavaScript 开发人员的 Scala
- 面向 Python 开发人员的 Scala
- 下一步