Scala中zip或者zipWithIndex的计数器用法
来源:互联网 发布:linux 调整根目录大小 编辑:程序博客网 时间:2024/06/04 00:21
你要遍历一个有序集合,同时你又想访问一个循环计数器,但最重要的是你真的不需要手动创建这个计数器。
解决方案:
使用zipWithIndex或者zip方法来自动地创建一个计数器,假设你有一个有序集合days,那么你可以使用zipWithIndex和counter来打印带有计数器的集合元素:
scala> val days = Array("Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday")days: Array[String] = Array(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)scala> days.zipWithIndex.foreach{case(day,count) => println(s"$count is $day")}0 is Sunday1 is Monday2 is Tuesday3 is Wednesday4 is Thursday5 is Friday6 is Saturday
同样,你可以使用for循环来打印计数器和集合元素
scala> for((day,count) <- days.zipWithIndex) { | println(s"$count is $day") | }0 is Sunday1 is Monday2 is Tuesday3 is Wednesday4 is Thursday5 is Friday6 is Saturday
zipWithIndex的计数器都是从0开始,如果你想指定开始的值,那么你可以使用zip Stream:
scala> for((day,count) <- days.zip(Stream from 1)) { | println(s"$count is $day") | }1 is Sunday2 is Monday3 is Tuesday4 is Wednesday5 is Thursday6 is Friday7 is Saturday
Discussion
当有序集合调用zipWithIndex的时候,它会返回一个有序的二元组集合:
scala> val list = List("a", "b", "c")list: List[String] = List(a, b, c)scala> list.zipWithIndexres3: List[(String, Int)] = List((a,0), (b,1), (c,2))
因为zipWithIndex是在一个已经存的有序集合上基础上建立一个新的有序集合,你可以在调用zipWithIndex之前调用view:
scala> val zwv = list.view.zipWithIndexzwv: scala.collection.SeqView[(String, Int),Seq[_]] = SeqViewZ(...)
就像上面这个例子里面看到的,它创建了一个lazy view在原有的List基础上,所以这个元组集合并不被会被创建,直到它被调用的那一刻。正因有这种特性,我们推荐在调用zipWithIndex之前先调用view方法。
zip和zipWithIndex方法都返回一个有序二元祖集合。因此,你的foreach方法也可以写成下面这样,虽然这比起解决方案中的方法,可读性略差。
scala> days.zipWithIndex.foreach(d => println(s"${d._2} is ${d._1}"))0 is Sunday1 is Monday2 is Tuesday3 is Wednesday4 is Thursday5 is Friday6 is Saturday
在之前的例子中我们曾经见过,可以通过一个for循环加range来创建这个计数器:
scala> val fruits = Array("apple", "banana", "orange")fruits: Array[String] = Array(apple, banana, orange)scala> for (i <- 0 until fruits.size) println(s"element $i is ${fruits(i)}")element 0 is appleelement 1 is bananaelement 2 is orange
阅读全文
0 0
- Scala中zip或者zipWithIndex的计数器用法
- Scala中 zip或者zipWithIndex的用法
- Scala常用函数式编程之map、foreach、flatten、flatmap、filter、zip、zipWithIndex
- scala中函数组合器的用法(map,filter,zip,foreach,groupBy,flatten,drop等)
- scala中神奇的map tuple zip
- scala里面的zip
- Spark编程之基本的RDD算子之zip,zipPartitions,zipWithIndex,zipWithUniqueId
- scala中=>的用法
- scala中Map的用法
- python中zip()函数的用法
- Scala中中下划线(_)的用法
- Scala 中apply方法的用法~(转)
- Scala中break与continue的用法
- Spark算子[17]:zip、zipPartitions、zipWithIndex、zipWithUniqueId 实例详解
- 7zip的用法
- python3 zip的用法
- python zip的用法
- python zip的用法
- 技能树
- 文件格式之csv
- caffe ubuntu下ctrl+C不能保存模型
- android表情编码与解码
- vbox出现Failed to opencreate the internal network错误,无法启动虚拟机
- Scala中zip或者zipWithIndex的计数器用法
- [资源分享]making a simple RPG in UNITY (教程压缩包分享)
- C#中的is和as操作符
- 【剑指Offer】面试题62:序列化二叉树
- 动态规划法求解硬币找零(Java)
- TP的空操作、空控制器、跨控制器调用
- git部分命令
- (Caffe,LeNet)网络训练流程(二)
- 关于获取RadioGroup里面的RadioButton的值,多行RadioGroup展示清除选中效果