如何在scala中切片元组
发布时间:2020-12-16 09:43:26 所属栏目:安全 来源:网络整理
导读:我正在尝试切片元组,删除最后两个项目。我尝试使用列表drop / take方法,但我不能成功获得一个元组。 这是我试过的方法: scala val myTuple = (1,2,4,5,5)myTuple: (Int,Int,Int) = (1,5)scala val myList = myTuple.productIterator.toListmyList: List[A
我正在尝试切片元组,删除最后两个项目。我尝试使用列表drop / take方法,但我不能成功获得一个元组。
这是我试过的方法: scala> val myTuple = (1,2,4,5,5) myTuple: (Int,Int,Int) = (1,5) scala> val myList = myTuple.productIterator.toList myList: List[Any] = List(1,5) scala> val mySubList = myList.dropRight(2) mySubList: List[Any] = List(1,5) scala> val mySubTuple = ??? 我看到here那个列表中的元组不是(可以)可能在scala中。 有没有其他方法来获得这个小组合(不用处理myTuple._1,myTuple._2 …)? 解决方法
这是
shapeless可以以通用方式进行的,涉及转换为HList的那种事情。
首先 – get shapeless.然后运行依赖方法类型打开的scala(在2.10中默认打开): C:Scalasdkscala-2.9.2bin>scala -Ydependent-method-types Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM,Java 1.7.0_04). Type in expressions to have them evaluated. Type :help for more information. 添加无形到类路径: scala> :cp C:UserscmarshaDownloadsshapeless_2.9.2-1.2.2.jar Added 'C:UserscmarshaDownloadsshapeless_2.9.2-1.2.2.jar'. Your new classpath is: "C:tibcotibrv8.2libtibrvnative.jar;C:UserscmarshaDownloadsshapeless_2.9.2-1.2.2.jar" 现在让我们玩! scala> (1,2.3,'a,'b',"c",true) res0: (Int,Double,Symbol,Char,java.lang.String,Boolean) = (1,b,c,true) 我们必须导入无形 scala> import shapeless._; import Tuples._; import Nat._ import shapeless._ import Tuples._ import Nat._ 我们把元组变成一个高分子 scala> res0.hlisted res2: shapeless.::[Int,shapeless.::[Double,shapeless.::[Symbol,shapeless.::[Char,shapeless.::[java.lang.String,shapeless.::[Boolean,shapeless.HNil]]]]]] = 1 :: 2.3 :: 'a :: b :: c :: true :: HNil 然后我们取第一个4(注意_4是一个类型参数,而不是一个方法参数) scala> res2.take[_4] res4: shapeless.::[Int,shapeless.HNil]]]] = 1 :: 2.3 :: 'a :: b :: HNil 现在转换回一个元组 scala> res4.tupled res5: (Int,Char) = (1,b) 我们可以缩短这个: val (a,d) = sixtuple.hlisted.take[_4].tupled //a,c and d would all have the correct inferred type 这当然将泛化到N元组的第一M个元素 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |