在 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 Book 中深入了解元組