Scala:按顺序从列表元素创建元组列表
发布时间:2020-12-16 08:49:17 所属栏目:安全 来源:网络整理
导读:我对 Scala很新,所以这个问题可能很天真. 我有一个像List [Int] = List(0,3,6,12,14,15,16,17)这样的列表.我试图创建一个像[(0,3),(3,6),(6,12)..]等列表.到目前为止,这是我尝试过的: val l1= List(0,17)var l2=scala.collection.mutable.ListBuffer[(Int,I
我对
Scala很新,所以这个问题可能很天真.
我有一个像List [Int] = List(0,3,6,12,14,15,16,17)这样的列表.我试图创建一个像[(0,3),(3,6),(6,12)..]等列表.到目前为止,这是我尝试过的: val l1= List(0,17) var l2=scala.collection.mutable.ListBuffer[(Int,Int)]() l1.zipWithIndex.slice(0,l1.length-1).foreach(x=>{val newval=(x._1,l1(x._2+1)); l2+=newval}) 这里有两个问题: >如果我不使用val newval,即尝试执行l1.zipWithIndex.slice(0,l1.length-1).foreach(x => l2 =(x._1,l1(x._2 1)) ),编译器说: 解决方法
> =是ListBuffer l2上接受重复参数的方法.这意味着当你做这样的事情时:
scala> var l2 = scala.collection.mutable.ListBuffer[(Int,Int)]() l2: scala.collection.mutable.ListBuffer[(Int,Int)] = ListBuffer() scala> l2 += (1,2) <console>:9: error: type mismatch; found : Int(1) required: (Int,Int) l2 += (1,2) ..当您尝试添加元组时,编译器认为您正在尝试向ListBuffer添加多个Int.你需要一组额外的括号. l1.zipWithIndex.slice(0,l1.length-1).foreach(x=> l2 += ((x._1,l1(x._2+1)) )) >您可以使用滑动,这将在整个集合中创建一个“滑动窗口”,以返回特定组大小的列表列表,默认情况下步长为1: scala> List(0,17).sliding(2) .map { case List(a,b) => (a,b) }.toList res10: List[(Int,Int)] = List((0,12),(12,14),(14,15),(15,16),(16,17)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读