针对集合的操作

遍历操作
  • 列表的遍历

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_针对集合的操作的更多相关文章

  1. Learn day3 深浅拷贝/格式化/字符串/列表/字典/集合/文件操作

    1. pass break continue # ### pass break continue # (1) pass 过 """如果代码块当中,什么也不写,用pass来 ...

  2. paip.数组以及集合的操作uapi java php python总结..

    paip.数组以及集合的操作uapi 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...

  3. IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】

    NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...

  4. java集合框架工具类Collections,集合的操作

    1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...

  5. java集合的操作(set,Iterator)

    集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...

  6. python 集合相关操作

    集合相关操作 集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试. 去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了 关系测试指的是,测试两组数据之间的交集.差集 ...

  7. Scala 运算符和集合转换操作示例

    Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为 ...

  8. Python中集合的操作

    Python集合的基本详情 集合是无序的 集合是可变数据类型 集合属于不可哈希范围 集合自动去重 集合的操作 set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} ...

  9. Python—集合的操作、文件的操作

    1.集合的操作 2.文件的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: >>> s1 = set('abcd ...

随机推荐

  1. Java中方法的重写

    ★★前提:方法的重写建立在继承关系上★★ 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量. 所谓方法的重写是指子类中的方法与父类中继承 ...

  2. de4dot破解脱壳新版MaxtoCode源数组长度不足解决办法

    之前在看雪混了4年.NET破解版主,现在转战这里,发现很多人还在玩的是工具类的破解,可以说这里的人都还是皮毛啊 最近很多人问使用de4dot脱壳MaxtoCode有问题,之前写过一个教程,那是工具篇的 ...

  3. map reduce 用法 str处理lower() capitalize()

    -- s=' l={':9}[s[0]] print(l) 取出dic里面key的元素 def normalize(name): tempn=name.lower().capitalize() ret ...

  4. 脚本路径问题_dirname

    pwd可获取命令当前的路径 可是若我们想在脚本中获取脚本所在文件夹的路径,这种方法是不够用的. 例如,我们的脚本放在/home/user/script/下,名字叫做getpath.sh getpath ...

  5. Spring 系列教程之默认标签的解析

    Spring 系列教程之默认标签的解析 之前提到过 Spring 中的标签包括默认标签和自定义标签两种,而两种标签的用法以及解析方式存在着很大的不同,本章节重点带领读者详细分析默认标签的解析过程. 默 ...

  6. python range用法

    1. range(n) 相当于枚举 从0<=i<n的整数 增量为1 for i in range(4): print(i) 结果:0 1 2 3 2. range(5,10) 相当于枚举 ...

  7. ExportGrid Aspose.Cells.dll

    using Aspose.Cells; using Aspose.Words; using System; using System.Collections; using System.Collect ...

  8. maven-javadoc-plugin 出现错误Unsupported major.minor version 51.0

    [INFO] --- maven-javadoc-plugin:3.0.0:jar (attach-javadocs) @ eii-frame-sms ---[WARNING] Error injec ...

  9. 2019.01.19 codeforces893F.Subtree Minimum Query(线段树合并)

    传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段 ...

  10. 2018.12.31 bzoj3992: [SDOI2015]序列统计(生成函数+ntt+快速幂)

    传送门 生成函数简单题. 题意:给出一个集合A={a1,a2,...as}A=\{a_1,a_2,...a_s\}A={a1​,a2​,...as​},所有数都在[0,m−1][0,m-1][0,m− ...