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

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)) ),编译器说:
< console>:10:错误:类型不匹配;
发现:国际
必需:(Int,Int)
??????????l1.zipWithIndex.slice(0,l1(x._2 1))).这是为什么?
>如果没有可变的listbuffer,怎么办?

解决方法

> =是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))

(编辑:李大同)

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

    推荐文章
      热点阅读