scala – 压缩多个序列
发布时间:2020-12-16 09:46:51 所属栏目:安全 来源:网络整理
导读:我试图压缩多个序列形成一个长元组: val ints = List(1,2,3)val chars = List('a','b','c')val strings = List("Alpha","Beta","Gamma")val bools = List(true,false,false)ints zip chars zip strings zip bools 我得到什么: List[(((Int,Char),String),B
我试图压缩多个序列形成一个长元组:
val ints = List(1,2,3) val chars = List('a','b','c') val strings = List("Alpha","Beta","Gamma") val bools = List(true,false,false) ints zip chars zip strings zip bools 我得到什么: List[(((Int,Char),String),Boolean)] = List((((1,a),Alpha),true),(((2,b),Beta),false),(((3,c),Gamma),false)) 但是我想得到一个平面元组序列: List[(Int,Char,String,Boolean)] = List((1,a,Alpha,(2,b,Beta,(3,c,Gamma,false)) 我现在可以做: List(ints,chars,strings,bools).transpose 但它返回弱类型List [List [Any]]。也可以做(ints,chars,字符串).zipped,但压缩只适用于2元组和3元组。 有没有办法拉链(任意)数的等长序列很容易? 解决方法
这里有一种方法来解决你的例子,但这不是一个任意数量的序列。
val ints = List(1,false) val input = ints zip chars zip strings zip bools // Flattens a tuple ((A,B),C) into (A,B,C) def f2[A,C](t: ((A,C)) = (t._1._1,t._1._2,t._2) // Flattens a tuple ((A,C,D) into (A,D) def f3[A,D](t: ((A,D)) = (t._1._1,t._2,t._3) input map f2 map f3 我不认为这是可能做到一般的任意长度的元组,至少不是这种解决方案。元组是强类型的,并且类型系统不允许你指定可变数目的类型参数,就我所知,这使得不可能使f2和f3的广义版本采用任意长度的元组((A,B),C,D,…)(将返回元组(A,B,C,D,…))。 如果有一种方法来指定可变数量的类型参数,我们不需要在Scala的标准库中的traits Tuple1,Tuple2,… Tuple22。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 原Angular团队成员投身JavaScript框架Aurelia
- unix – ssh-copy-id未找到标识错误
- 从Play2 / Scala内存中的MultipartFormData中提取文件
- 【数据结构】红黑树的实现
- AngularJs中Bootstrap3 datetimepicker使用实例
- reverse shell dll 源码
- Angular 2 Bootstrapping Options – AOT vs JIT
- 3.2、Bootstrap V4自学之路------内容---代码
- docker build可以使用git分支的url吗?
- scala – Cassandra spark连接器joinWithCassandraTable在具