在 Scala 中,元组是一个包含固定数量元素的值,每个元素都有自己的类型。元组是不可变的。
元组特别适合于从方法返回多个值。
可以按如下方式创建包含两个元素的元组
val ingredient = ("Sugar", 25)
这将创建一个包含一个 String
元素和一个 Int
元素的元组。
ingredient
的推断类型为 (String, Int)
。
访问元素
访问元组元素的一种方法是其位置。各个元素的名称为 _1
、_2
等。
println(ingredient._1) // Sugar
println(ingredient._2) // 25
访问元组元素的一种方法是其位置。各个元素通过 tuple(0)
、tuple(1)
等访问。
println(ingredient(0)) // Sugar
println(ingredient(1)) // 25
元组上的模式匹配
还可以使用模式匹配分解元组
val (name, quantity) = ingredient
println(name) // Sugar
println(quantity) // 25
此处 name
的推断类型为 String
,quantity
的推断类型为 Int
。
以下是元组模式匹配的另一个示例
val planets =
List(("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6),
("Mars", 227.9), ("Jupiter", 778.3))
planets.foreach {
case ("Earth", distance) =>
println(s"Our planet is $distance million kilometers from the sun")
case _ =>
}
或者,在 for
解析中
val numPairs = List((2, 5), (3, -7), (20, 56))
for ((a, b) <- numPairs) {
println(a * b)
}
val numPairs = List((2, 5), (3, -7), (20, 56))
for (a, b) <- numPairs do
println(a * b)
元组和类案例
用户有时可能会发现难以在元组和类案例之间进行选择。类案例具有命名元素。这些名称可以提高某些代码的可读性。在上面的行星示例中,我们可以定义 case class Planet(name: String, distance: Double)
而不是使用元组。
更多资源
- 在 Scala 书籍 中了解有关元组的更多信息