快学Scala2-数组

作者: Codlife | 来源:发表于2016-08-07 16:51 被阅读0次

    参考书目:《快学scala》第三章

    Tips:函数式编程目前正在流行起来,大数据核心技术Spark 就是有Scala 开发

      /*
      * 学习要点:
      * 1.若长度固定则使用Array,否则使用ArrayBuffer
      * 2.提供初始值时不要使用 new
      * 3.用()访问元素
      * 4.for(elem <- arr) 遍历元素
      * 5.for(elem <- arr if....) yiled 将原来的数组转化为新数组
      * Scala 数组可以和Java数组相互转化,用ArrayBuffer,
      * 使用scala.collection.javaConvertions中的函数转化
      * */
      def testArray: Unit ={
        val nums=new Array[Int](10)
        val s=Array("wjf","csm")
        val b=ArrayBuffer[Int]()
        b+=1
        b+=(1,2,3,4)
        b ++= Array(8,13,21)
        // remove the last 3 elements
        // 在数组缓冲的尾端添加或移除元素非常高效
        b.trimEnd(3)
        b.insert(2,3)
    
        b.toArray
    
        val a=Array(1,2,3,4)
        // for(...) yiled 创建一个与原始集合类型相同的新集合
        // 守卫:if ,过滤元素
        /*有些有函数式编程经验的程序员喜欢使用filter 和map而不是使用
        * 守卫和 yiled ,这只是一种风格-for循环所做的事是完全相同的*/
        val reuslt=for(elem <- a) yield 2*elem
        var c=for(elem <- a if elem % 2 == 0) yield 2*elem
        c=a.filter(_ % 2 ==0).map(_*2)
        c=a.filter{_ % 2 ==0} map { _ *2}
      }
      /* 具体案例:一个数组,删除 除第一个负数外的所有负数
      * 对比下面两种实现
      * version1 每次遇见负数就删除,删除的过程效率较低
      * 需要数组元素的移动
      * Version2 首先获取需要保留的元素的下标,然后批量删除*/
      var a=new ArrayBuffer[Int](10)
      var first=true
      def version1: Unit ={
        for(i <- 0 until a.length) {
          if(a(i) < 0){
            if(first) first=false
            else a.remove(i)
          }
        }
      }
      def version2: Unit ={
        var indexs=for(i <- 0 until a.length if first | a(i)>0) yield{
          if(a(i) < 0) first=false
          i
        }
        for(i <- 0 until indexs.length)a(i)=a(indexs(i))
        a.trimEnd(a.length - indexs.length)
      }
    
      def testOFDim: Unit ={
        val matrix=Array.ofDim[Double](2,3)
        matrix(1)(1)=2
        val triangle=new Array[Array[Int]](10)
        for(i <- 0 until triangle.length)
          triangle(i)=new Array[Int](i+1)
      }
    

    相关文章

      网友评论

        本文标题:快学Scala2-数组

        本文链接:https://www.haomeiwen.com/subject/gjylsttx.html