• scala(五)集合


    1.数组

    new Array后面需要加个泛型 赋值时()而不是[]

    数组定义、数据的修改、多种遍历

    (1)数组定义
            val arr01 = new Array[Int](4)
            println(arr01.length) // 4
    
            //(2)数组赋值
            //(2.1)修改某个元素的值
            arr01(3) = 10
            val i = 10
            arr01(i/3) = 20
            //(2.2)采用方法的形式修改数组的值
            arr01.update(0,1)
    
            //(3)遍历数组
            //(3.1)查看数组
            println(arr01.mkString(",")) 
    
            //(3.2)普通遍历
            for (i <- arr01) {
                println(i)
            }
    
            //(3.3)简化遍历
            def printx(elem:Int): Unit = {
                println(elem)
            }
            arr01.foreach(printx)    //将arr01中的数据拿出来放到foreach遍历
            arr01.foreach((x)=>{println(x)})
            arr01.foreach(println(_))
            arr01.foreach(println)
        }
    }
    
    

    多维数组、数组合并、创建指定范围的数组

    //多维数组
    val array: Array[Array[Int]] = Array.ofDim[Int](3,2)
      array.foreach(Array => println(Array.mkString(",")))
    0,0
    0,0
    0,0
    //数组合并
    val arr1 = Array(1,2,3,4)
        val arr2 = Array(5,6,7,8)
        val ints: Array[Int] = Array.concat(arr1,arr2)
        ints.foreach(println(_))
    //创建指定范围的数组
     val ints: Array[Int] = Array.range(1,5,2) //1到5 不包括5 2为步长   1 3
        ints.foreach(println(_))
    

    2.集合中常用方法

    计算相关的方法

    功能函数: 由集合对象提供函数执行自定义的功能

    map => 映射(转换) a=> b 将集合中的每一条数据进行处理

    val arr2: ArrayBuffer[Int] = ArrayBuffer(1,2,3,4)
        val ints1: ArrayBuffer[Int] = arr2.map(num => num*2)
        println(ints1)
    

    将整体拆分成个体的操作,称之为扁平化

    扁平化操作只能对最外层进行操作

    flatten flatMap :自定义扁平化 将集合中的每个整体扁平化

    val strings: ArrayBuffer[String] = ArrayBuffer("hello world","hello scala")
        val strings1: ArrayBuffer[String] = strings.flatMap(str => {
          str.split(" ")
        })
        println(strings1)
    

    filter

    filter方法可以对集合中的每一条数据进行筛选过滤

    满足条件(true)的数据保留,不满足条件(false)的数据丢弃

      val ints: ArrayBuffer[Int] = arr.filter(num => {
          num % 2 != 0
        })
        println(ints)
    

    reduce 聚合两个值变一个

     val arr2: ArrayBuffer[Int] = ArrayBuffer(1,2,3,4)
        arr2.reduce((x:Int,y:Int)=>{x+y} )
    

    groupby 按照一定规则分组

    val arr2: ArrayBuffer[Int] = ArrayBuffer(1,2,3,4)
      val booleanToInts= arr2.groupBy(num => {
          num % 2
        })
    
      val arr3: ArrayBuffer[String] = ArrayBuffer("hello","scala","hadoop","spark")
        val stringToStrings: Map[String, ArrayBuffer[String]] = arr3.groupBy(str => {
          str.substring(0, 1)   //分组规则
        })
    

    sortBy 通过指定的规则对每一条数据进行排序处理 默认为升序

     val strings2: ArrayBuffer[String] = ArrayBuffer("1","2","22","11")
        println(strings2.sortBy(str => str.toInt))
    ArrayBuffer(1, 2, 11, 22)
        val strings2: ArrayBuffer[String] = ArrayBuffer("1","2","22","11")
        println(strings2.sortBy(str => str.toInt)(Ordering.Int.reverse))   //函数柯里化  中间的int是可变的  看你是什么类型
    ArrayBuffer(22, 11, 2, 1)
    

    word count案例

     def main(args: Array[String]): Unit = {
    
            // TODO 1. 读取文件,获取原始数据
            //  line => Hello Scala
            val source: BufferedSource = Source.fromFile("data/word.txt")
            val lines: Array[String] = source.getLines().toArray
            source.close()
    
            // TODO 2. 将原始数据进行切分成一个一个的单词
            // "Hello Scala" => "Hello", "Scala"
            val words = lines.flatMap(
                line => {
                    line.split(" ")
                }
            )
    
            // TODO 3. 对分词的结果进行分组操作(相同的单词放置在一起)
            // "Hello", "Hello" => { "Hello"=>List( Hello, Hello ) }
            val wordGroup: Map[String, Array[String]] = words.groupBy(word => word)
    
            // TODO 4. 对分组后的数据进行数量的统计
            // 如果数据在转换时,无需对key进行操作,只对v进行处理时,可以使用mapValues方法
            // { "Hello"=>List( Hello, Hello ) }
            // =>
            // { "Hello"=>2 }
            val wordCount = wordGroup.mapValues(
                v => {
                    v.size
                }
            )
    
            // TODO 5. 将统计结果打印在控制台
            println(wordCount)
    
        }
    def main(args: Array[String]): Unit = {
    
            // TODO 1. 读取文件,获取原始数据
            //  line => Hello Scala
            val source: BufferedSource = Source.fromFile("data/word.txt")
            val lines: Array[String] = source.getLines().toArray
            source.close()
    
            val wordCount =
                lines
                    .flatMap(_.split(" "))
                    .groupBy(word => word)
                    .mapValues(_.size)
    
            println(wordCount)
    
        }
    

    2.元组

    scala可以将无关的元素组合在一起,形成一个整体来进行访问,这种整体结构称之元素组合,称为元组

  • 相关阅读:
    General part中方向选取的作用
    mount part中位置的作用
    关于zero pivot
    Revit二次开发示例:ModelessForm_ExternalEvent
    elasticsearch6.4 memory locking requested for elasticsearch process but memory is not locked
    百度网盘 http://pandownload.com/index.html
    MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
    linux 系统优化
    服务器cpu过高修复:操作系统内核bug导致
    Jvm中时区设置方式
  • 原文地址:https://www.cnblogs.com/xiao-bu/p/14815079.html
Copyright © 2020-2023  润新知