首页 > 其他 > 详细

scala 元组tuple的几个知识点

时间:2015-12-05 02:16:57      阅读:214      评论:0      收藏:0      [点我收藏+]

通过下标_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)

scala 元组tuple的几个知识点

原文:http://zhouchaofei2010.iteye.com/blog/2261584

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!