scala的多种集合的使用(3)之遍历集合的方法
遍历集合的方法
1.用foreach循环遍历一个集合
foreach接收一个函数作为参数。定义的函数应该接收一个元素作为输入参数,然后不要返回任何的东西。输入的参数的类型应该匹配集合中的类型。随着foreach的执行,它每次都会把一个元素传给你的函数,直到集合中最后一个元素。
foreach常用的就是输出信息:
scala> val x = Vector(1,2,3)
x: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3) scala> x.foreach((i:Int) => println(i))
1
2
3
对于表达式,还有其他写法:
x.foreach(i => println(i)) x.foreach(println(_)) x.foreach(println)
对于最后一种表达式,情况是一个只有一条语句组成并且接受一个参数的函数可以简写成这种形式。
2.用for循环遍历一个集合
可以用for循环遍历任意一种Traversable的类型。
scala> val fruits = Traversable("apple","orange","banana")
fruits: Traversable[String] = List(apple, orange, banana)
scala> for(i <- fruits) println(i)
apple
orange
banana
如果算法很长,可以在for循环的代码块里执行。
下面展示了for循环里使用计数器的几种方式:
scala> val fruits = Array("apple","banana","orange")
fruits: Array[String] = Array(apple, banana, orange)
scala> for(i <- 0 until fruits.size) println(s"$i is ${fruits(i)}")
0 is apple
1 is banana
2 is orange
scala> val fruits = Array("apple","banana","orange")
fruits: Array[String] = Array(apple, banana, orange)
scala> for((elem,count) <- fruits.zipWithIndex){
| println(s"$count is $elem")
| }
0 is apple
1 is banana
2 is orange
scala> val fruits = Array("apple","banana","orange")
fruits: Array[String] = Array(apple, banana, orange)
scala> for((elem,count) <- fruits.zip(Stream from 1)){
| println(s"$count is $elem")
| }
1 is apple
2 is banana
3 is orange
3.用zipWithIndex创建循环计数器
(1)以foreach的形式遍历集合
scala> val days = Array("Sunday","Monday","Tusday","Wednsday","Thursday","Friday","Saturday")
days: Array[String] = Array(Sunday, Monday, Tusday, Wednsday, Thursday, Friday,Saturday)
scala> days.zipWithIndex.foreach{
| case(day,count) => println(s"${count+1} is $day")
| }
1 is Sunday
2 is Monday
3 is Tusday
4 is Wednsday
5 is Thursday
6 is Friday
7 is Saturday
另外的一种表示方法:
scala> val days = Array("Sunday","Monday","Tusday","Wednsday","Thursday","Friday","Saturday")
days: Array[String] = Array(Sunday, Monday, Tusday, Wednsday, Thursday, Friday,Saturday)
scala> days.zipWithIndex.foreach{ d=>
| println(s"${d._2+1} is ${d._1}")
| }
1 is Sunday
2 is Monday
3 is Tusday
4 is Wednsday
5 is Thursday
6 is Friday
7 is Saturday
(2) 以for的形式循环遍历
scala> val days = Array("Sunday","Monday","Tusday","Wednsday","Thursday","Friday","Saturday")
days: Array[String] = Array(Sunday, Monday, Tusday, Wednsday, Thursday, Friday,Saturday)
scala> for ((day,count) <- days.zipWithIndex){
| println(s"${count+1} is $day")
| }
1 is Sunday
2 is Monday
3 is Tusday
4 is Wednsday
5 is Thursday
6 is Friday
7 is Saturday
4.用zip创建循环计数器
在zip中使用Stream是一种生存计数器的方法。
scala> val days = Array("Sunday","Monday","Tusday","Wednsday","Thursday","Friday","Saturday")
days: Array[String] = Array(Sunday, Monday, Tusday, Wednsday, Thursday, Friday,Saturday)
scala> for ((day,count) <- days.zip(Stream from 1)){
| println(s"$count is $day")
| }
1 is Sunday
2 is Monday
3 is Tusday
4 is Wednsday
5 is Thursday
6 is Friday
7 is Saturday
5.range循环计数器
如果只是需要重复做某事多次,可以用range。
scala> val fruits = Array("apple","banana","orange")
fruits: Array[String] = Array(apple, banana, orange)
scala> for(i <- 0 until fruits.size) {
| println(s"$i is ${fruits(i)}")}
0 is apple
1 is banana
2 is orange
6.用reduce方法遍历集合
使用reduceLeft和reduceRight方法来遍历序列中的元素,把相邻的元素传给你的函数成成一个新的结果,之后和序列的下一个元素比较在生成新的结果。
reduceLeft方法是从左到右遍历一个序列,在算法中首先会对前两个元素进行比较,然后返回一个结果。该结果会与第三个元素进行比较,比较之后在产生一个新结果,接着在于第四个元素比较,以此类推。
scala> val a = Array(12,3,4,5,67)
a: Array[Int] = Array(12, 3, 4, 5, 67) scala> a.reduceLeft(_ + _)
res4: Int = 91 scala> a.reduceLeft(_ min _)
res5: Int = 3 scala> a.reduceLeft(_ max _)
res6: Int = 67
这里面的两个下划线,它们代表传给函数的两个参数。
reduceRight与reduceLeft同理的。
7.用fold方法遍历集合
foldLeft方法如同reduceLeft,它会设置一个种子值用于第一个元素。foldLeft接收两个参数列表。第一个列表有一个字段,种子值。第二个列表是要运行的代码块。
scala> val a = Array(12,3,4,5,67)
a: Array[Int] = Array(12, 3, 4, 5, 67) scala> a.reduceLeft(_ + _)
res8: Int = 91 scala> a.foldLeft(20)(_ + _)
res9: Int = 111
我们来看一下foldLeft和foldRight的执行过程:
下面的/:是foldLeft的简化版。
scala> ((1 to 4).foldLeft(5))((i,sum) => i-sum)
res25: Int = -5 scala> (1 to 4).foldLeft(5)(_-_)
res8: Int = -5 scala> (5/:(1 to 4))(_-_)
res9: Int = -5
foldLeft的执行过程:5-1-2-3-4=-5
下面的:\是foldRight的简化版。
scala> ((1 to 4).foldRight(5))((i,sum) => i-sum)
res22: Int = 3 scala> (1 to 4).foldRight(5)(_-_)
res14: Int = 3 scala> ((1 to 4):\5)(_-_)
res15: Int = 3
foldRight的执行过程:1-(2-(3-(4-(5-0))))=3
scala的多种集合的使用(3)之遍历集合的方法的更多相关文章
- 集合-新特性foreach循环遍历集合或项目
1.增强for循环对集合的遍历 点击查看代码 @Test //集合遍历 public void test3(){ Collection coll = new ArrayList(); coll.add ...
- Java基础知识强化之集合框架笔记62:Map集合之HashMap嵌套HashMap
1. HashMap嵌套HashMap 传智播客 jc 基础班 陈玉楼 20 高跃 ...
- Java基础知识强化之集合框架笔记14:List集合存储字符串并遍历
1. List集合存储学生对象并遍历: 需求:存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)添加字符串对象到集合中 (4)遍历集合 2. 代码示例: package cn. ...
- Java基础知识强化之集合框架笔记12:Collection集合存储字符串并遍历
1. Collection集合存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)把字符串对象添加到集合中 (4)遍历集合 2. 代码示例: package cn.itcast ...
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
概述 Java语言中,提供了一套数据集合框架,其中定义了一些诸如List.Set等抽象数据类型,每个抽象数据类型的各个具体实现,底层又采用了不同的实现方式,比如ArrayList和LinkedList ...
- 迭代器:遍历集合元素的操作. iterator()
package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; / ...
- scala的多种集合的使用(6)之映射Map的操作方法
1.创建映射 1)创建不可变的映射 scala> val status = Map(1 -> "a",2 -> "b") status: sc ...
- scala的多种集合的使用(2)之集合常用方法
一.常用的集合方法 1.可遍历集合的常用方法 下表列出了Traverable在所有集合常用的方法.接下来的符号: c代表一个集合 f代表一个函数 p代表一个谓词 n代表一个数字 op代表一个简单的操作 ...
- scala的多种集合的使用(1)之集合层级结构与分类
一.在使用scala集合时有几个概念必须知道: 1.谓词是什么? 谓词就是一个方法,一个函数或者一个匿名函数,接受一个或多个函数,返回一个Boolean值. 例如:下面方法返回true或者false, ...
随机推荐
- ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...
- h2engine游戏服务器设计之聊天室示例
游戏服务器设计之聊天室示例 简介 h2engine引擎建群以后,有热心网友向我反馈,想尝试h2engine但是没有服务器开发经验觉得无从入手,希望我能提供一个简单明了的示例.由于前一段时间工作实在忙碌 ...
- [开源]基于Log4Net简单实现KafkaAppender
背景 基于之前基于Log4Net本地日志服务简单实现 实现本地日志服务,但是随着项目开发演进,本地日志服务满足不了需求,譬如在预发布环境或者生产环境,不可能让开发人员登录查看本地日志文件分析. Kaf ...
- 修改VS2017新建类模板文件添加注释
找到Class.cs文件 找到VS2017安装目录下面的Class.cs文件,一般在C盘或者D盘 我的VS2017安装在D盘,所以在D盘以下目录找到 D:\Program Files (x86)\Mi ...
- Form 表单提交的几种方式
简单的总结一下form表单提交的几种方式:1.最简单的方式 就用form的submit提交方式,这种提交方式是不需要回调函数的 这种方式最近到一个form提供action路径后台接受就可以< ...
- C# 中 equals( ) 和 == 的区别和用法
Equals: 下面的语句中,x.y 和 z 表示不为 null 的对象引用. * 除涉及浮点型的情况外,x.Equals(x) 都返回 true. * x.Equals(y) 返回与 y.Equal ...
- jQuery(一)、核心
我认为,学习一门语言,主要是掌握它的思想与用途,就好比谈恋爱一样,你只要猜测到了对方的想法,就能够知情达意.废话不多说,我们开始今天学习的进度,加油ヾ(◍°∇°◍)ノ゙ 1. jQuery([sele ...
- Python实例----------每日一贴
def function_tips(): '''功能:每天输出一条励志文字 ''' import datetime # 导入日期时间类 # 定义一个列表 mot = ["今天星期一:\n人生 ...
- CDN的简单理解
百度百科上的解释:CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调 ...
- Ubuntu18.04下安装配置MongoDB4.0.6
搭建MongoDB环境 安装MongoDB 1.下载安装包 MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb ...