zoukankan      html  css  js  c++  java
  • 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 " , 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()自身而言,遍历的顺序是未定义的, 不过,一般都是从左到右遍历。

  • 相关阅读:
    如何搭建SVN的客户端和使用
    SVN服务器的本地搭建和使用
    grep命令
    cat命令
    cut命令
    yum 命令
    XPath、XQuery 以及 XSLT 函数
    XPath 实例
    XPath 运算符
    XPath Axes(轴)
  • 原文地址:https://www.cnblogs.com/zxbdboke/p/10466332.html
Copyright © 2011-2022 走看看