加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在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个元素

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读