跳轉到內容

Scala/元組

來自華夏公益教科書,開放的書籍,開放的世界

Scala 中的元組是一個不可變的多個型別值的序列。一個簡單的例子

val idUsername = (0, "randomusername")
println("Id is: " + idUsername._1) //Prints "Id is: 0".
println("Username is: " + idUsername._2) //Prints "Username is: randomusername".

在第一行中,我們定義一個名為“idUsername”的值,併為其賦值一個包含 2 個值的元組,也稱為對。元組由一對匹配的括號定義,包含按順序排列的每個元素,元素之間用逗號分隔。'0' 是第一個元素,'"randomusername"' 是第二個元素。在第二行中,透過對名為“idUsername”的值呼叫“_1”方法來訪問元組的第一個元素,並列印值 '0'。在第三行中,透過對名為“idUsername”的值呼叫“_2”方法來訪問元組的第二個元素,並列印值 '"randomusername"'。

元組支援輕鬆地將元素繫結到值

val (id, username) = (0, "randomusername")
println("Id is: " + id) //Prints "Id is: 0".
println("Username is: " + username) //Prints "Username is: randomusername".

在第一行中,使用關鍵字 "val" 後跟一對括號聲明瞭兩個識別符號,括號中包含用逗號分隔的識別符號。緊隨其後是一個等號,等號之後定義了元組 '(0, "randomusername")'。第一個識別符號 "id" 繫結到第一個元素 '0',而第二個識別符號 "username" 繫結到第二個元素 '"randomusername"'。在第二行中,列印名為 "id" 的值,得到 "Id is: 0",在第三行中,列印名為 "username" 的值,得到 "Username is: randomusername"。

元組的用途之一是返回多個值,而不必從頭開始為特定返回值建立類

def getSumAverage(numbers:List[Int]) = {
  val sum = numbers.sum
  val average = (sum:Double) / numbers.length
  (sum, average)
}
val numbers = List(1, 2, 30, 45, 13)
val (sum, average) = getSumAverage(numbers)
println("Sum, average is: " + sum + ", " + average) //Prints "Sum, average is: 91, 18.2".

在前 5 行中,定義了一個名為 "getSumAverage" 的函式,該函式接收一個數字列表,計算給定數字的總和和平均值,並將結果作為元組返回。在第六行中,定義了一個數字列表並將其儲存在一個名為 "numbers" 的值中,在第七行中,計算這些數字的總和和平均值並將它們儲存在值 "sum" 和 "average" 中。在最後一行中,列印總和和平均值。

三元組和四元組的示例

val (number, weight, name) = (7, 1.05, "Apple")
val (x, y, z, temperature) = (30.0, 100.0, -10.0, -5.3)

還值得注意的是,繫結元素的數量應與 TupleN 的數量完全一致,這意味著以下所有操作都會生成錯誤

val (number, others) = (7, 1.05, "Apple")
val (number, o, p, q) = (7, 1.05, "Apple")
val (number, _) = (7, 1.05, "Apple")

Python 類似,Scala 中的元組通常用於儲存異構值。這意味著當它被傳輸到其他聚合資料結構(如 List 或 Array)時,它不會對其元素型別進行任何假設。

val t = (1,2,3) // type is Tuple3[Int, Int, Int]
t.productIterator.toList // type is List[Any]
華夏公益教科書