1. 程式人生 > >scala 元組tuple的幾個知識點

scala 元組tuple的幾個知識點

通過下標_n取資料不多說了,下面是幾個比較有意思的知識點 

知識點
1、Tuple 和Function 和Producct一樣最多隻支援22個元素       比如 (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21) 這樣是沒問題的       但是(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2122) 會編譯不通過 2、Tuple 不能通過一個泛型引數來指定所有元素的型別,多個元素對應多個引數,試圖通過一個型別引數來 限定元組中所有的元素的型別是錯誤的        允許這樣使用 : var t=Tuple3[Int,Int,Int](1,2,3)  或者var t2= Tuple3(1,2,3) 或者var t3=(1,2,3)        不可以這樣使用:Tuple3[Int](1,2,3)  //試圖通過一個型別引數來限定元組中所有的元素的型別是錯誤的 3、Tuple 不像List一樣有map、flatMap 等方法直接操作元素,只能通過混入的ProductN(n代表1-22的數字) 的productIterator函式生成一個Iterator來操作資料,並且productIterator的返回型別是Iterator[Any] ,型別引數是Any ,所以操作資料的時候還要進行型別轉換。比如_.asInstanceOf[Int] 或者模式匹配
 例子
例子:val m = Map(2->(3,2) , 1->(2,1,3)) 怎麼實現相同key的元素相加,得到 Map(2->5 , 1->6) 的結果? 其中value是個元組,元組中可以有任意多個(1-22個)Int型別的數字 解決方案: val m2=m.mapValues(_.productIterator.map(_.asInstanceOf[Int]).sum)  object mapplus2 extends App {   val m = Map(2->(3,2) , 1->(2,1,3))   val m2=m.mapValues(_.productIterator.map(_.asInstanceOf[Int]).sum)   println(m2) } 執行結果:Map(2 -> 5, 1 -> 6)