Scala_针对集合的操作
针对集合的操作
遍历操作
列表的遍历
scala> val list = List(1,2,3,4,5,6)
list: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> for (elem <- list) println(elem)
1
2
3
4
5
6
也可以使用foreach进行遍历:
scala> val list = List(1,2,3,4,5,6)
list: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> list.foreach(elem => println(elem))
1
2
3
4
5
6
scala> list.foreach(println)
1
2
3
4
5
6
scala> list foreach println
1
2
3
4
5
6
映射的遍历
格式
for ((k , v) <- 映射) 语句块
val university2 = Map("XMU" -> "Xiamen University","THU" -> "Tsinghua University")
scala> for ((k,v) <- university2) printf("Code is : %s and name is : %s\n" , k , v)
Code is : XMU and name is : xiamen university
Code is : THU and name is : Tsinghua University
也可以使用foreach来实现对映射的遍历
scala> val university2 = Map("XMU" -> "Xiamen University","THU" -> "Tsinghua University")
university2: scala.collection.immutable.Map[String,String] = Map(XMU -> Xiamen University, THU -> Tsinghua University)
scala> university2 foreach {case(k,v) => println(k+":"+v)}
XMU:Xiamen University
THU:Tsinghua University
也可以尝试使用下面形式来遍历
scala> university2 foreach {kv => println(kv._1+":"+kv._2)}
XMU:Xiamen University
THU:Tsinghua University
map操作和flatMap操作
map操作是针对集合的典型变换操作,它将某个函数应用到集合中的每个元素,并产生一个结果集合。
scala> val books = List("hadoop","hive","hdfs")
books: List[String] = List(hadoop, hive, hdfs)
scala> books.map(s => s.toUpperCase)
res9: List[String] = List(HADOOP, HIVE, HDFS)
filter操作
flatMap是map的一种扩展。在flatMap中,我们会传入一个函数,该函数 对每个输入都会返回一个集合(而不是一个元素),然后,flatMap把生 成的多个集合“拍扁”成为一个集合。
scala> val books = List("hadoop","hive","hdfs")
books: List[String] = List(hadoop, hive, hdfs)
scala> books flatMap(s => s.toList)
res10: List[Char] = List(h, a, d, o, o, p, h, i, v, e, h, d, f, s)
上面的flatMap执行时,会把books中的每个元素都调用toList,生成 List[Char],最终,多个Char的集合被“拍扁”成一个集合。
遍历一个集合并从中获取满足指定条件的元素组成一个新的集合。Scala中可以 通过filter操作来实现。
采用filter操作过滤得到那些学校名称中包含“Tsinghua”的元素
scala> val university = Map("XMU" -> "Xiamen University","THU" -> "Tsinghua University")
university: scala.collection.immutable.Map[String,String] = Map(XMU -> Xiamen University, THU -> Tsinghua University)
scala> val filter = university filter {kv => kv._2 contains "Tsinghua"}
filter: scala.collection.immutable.Map[String,String] = Map(THU -> Tsinghua University)
采用filter操作过滤得到那些学校名称中以字母“X”开头的元素:
scala> val filteOfX = university filter {kv => kv._2 startsWith "X"}
filteOfX: scala.collection.immutable.Map[String,String] = Map(XMU -> Xiamen University)
reduce操作
使用reduce这种二元操作对集合中的元素进行归约,reduce包含reduceLeft和reduceRight两种操作,前者从集合的头部开始操作,后 者从集合的尾部开始操作。
scala> val list = List(1,2,3,4,5,6)
list: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> list.reduceLeft(_+_)
res11: Int = 21
scala> list.reduceRight(_+_)
res12: Int = 21
直接使用reduce,而不用reduceLeft和reduceRight,这时,默认采用的是reduceLeft
fold操作
折叠(fold)操作和reduce(归约)操作比较类似。fold操作需要从一个初始的 “种子”值开始,并以该值作为上下文,处理集合中的每个元素。
scala> val list = List(1,2,3,4,5,6)
list: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> list.fold(10)(_*_)
res13: Int = 7200
fold有两个变体:foldLeft()和foldRight(),其中,foldLeft(),第一个参数为 累计值,集合遍历的方向是从左到右。foldRight(),第二个参数为累计值, 集合遍历的方向是从右到左。对于fold()自身而言,遍历的顺序是未定义的, 不过,一般都是从左到右遍历。
Scala_针对集合的操作的更多相关文章
- Learn day3 深浅拷贝/格式化/字符串/列表/字典/集合/文件操作
1. pass break continue # ### pass break continue # (1) pass 过 """如果代码块当中,什么也不写,用pass来 ...
- paip.数组以及集合的操作uapi java php python总结..
paip.数组以及集合的操作uapi 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】
NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...
- java集合框架工具类Collections,集合的操作
1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...
- java集合的操作(set,Iterator)
集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...
- python 集合相关操作
集合相关操作 集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试. 去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了 关系测试指的是,测试两组数据之间的交集.差集 ...
- Scala 运算符和集合转换操作示例
Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为 ...
- Python中集合的操作
Python集合的基本详情 集合是无序的 集合是可变数据类型 集合属于不可哈希范围 集合自动去重 集合的操作 set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} ...
- Python—集合的操作、文件的操作
1.集合的操作 2.文件的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: >>> s1 = set('abcd ...
随机推荐
- hdu 2647 (拓扑排序 邻接表建图的模板) Reward
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...
- [转载] Linux中的搜索文件命令
搜索文件用处很大,我们往往需要知道一个文件存放在什么地方,我们又知道Linux是命令强大的一个系统,所以也有好多非常优秀的搜索命令.通常find不常用,因为速度慢,耗费硬盘空间.通常我们先使用wher ...
- POJ 2762 Going from u to v or from v to u?- Tarjan
Description 判断一个有向图是否对于任意两点 $x$, $y$ 都有一条路径使$x - >y$或 $y - >x$ Solution 对于一个强联通分量内的点 都是可以互相到达 ...
- struts2升级
http://www.blogjava.net/ldwblog/archive/2013/10/14/404944.html
- rpm安装jdk7
原文:http://www.centoscn.com/image-text/config/2015/0208/4658.html 系统环境:centos-6.5 安装方式:rpm安装 软件:jdk-7 ...
- sql相同项求和
select (SELECT O2.ORG_NAME FROM OUTSOURCE_ORG O2 where o2.org_id = oo.parent_id) ...
- centos 7 安装svn客户端
rpm -qa subversion yum remove -y subversion yum install -y subversion svnserve --version svn checkou ...
- 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)
传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...
- 2018.12.31 NOIP训练 偶数个5(简单数论)
传送门 对于出题人zxyoizxyoizxyoi先%\%%为敬题目需要龟速乘差评. 题意简述:5e55e55e5组数据,给出n,请你求出所有n位数中有偶数个5的有多少,n≤1e18n\le1e18n≤ ...
- 2018.12.30 bzoj3027: [Ceoi2004]Sweet(生成函数+搜索)
传送门 生成函数好题. 题意简述:给出n个盒子,第iii个盒子里有mim_imi颗相同的糖(但不同盒子中的糖不相同),问有多少种选法可以从各盒子中选出数量在[a,b][a,b][a,b]之间的糖果. ...