• scala学习之数组操作


    scala 数组分为定长数组(Array)和变长数组(ArrayBuffer):

    定长数组:

     /**
       * 定长数组
       */
      val array = new Array[Int](10) //定长数组 长度为10 初始化值为0
    
      val strs = new Array[String](10) //定长数组 长度为10 初始化值为null
    
      val str = Array("hello", "scala") //长度为2的字符串数组 类型推断  如果已有初始值 就不需要new
    
      str(0) = "Good"
      //Array("Good","scala") 数组访问是通过()

    变长数组:

      /**
       * 变长数组
       */
    
      var buffer = ArrayBuffer[Int]() //new ArrayBuffer[Int]() 空数组buffer
    
      buffer += 1 //尾端添加元素1
    
      buffer +=(2, 3, 4, 5) //尾端添加元素 2 3 4 5
    
      buffer ++= Array(1, 2, 3, 4) //追加集合
    
      buffer.trimEnd(5) //移除最后5元素
    
      //在数组尾端操作元素是高效的
    
      buffer.insert(2, 9) //将元素插入 (2)的位置
    
      buffer.insert(2, 7, 8, 0) //将7,8,0元素插入 (2)的位置
    
      buffer.remove(2) //移除buffer(2)
    
      buffer.remove(2, 3) //移除buffer的3个元素,从2开始计算
    
      buffer.toArray //转换成定长数组
    
      buffer.toArray.toBuffer //将定长数组转换成变长数组

    遍历数组:

     //遍历数组
    
      for (i <- 0 until buffer.length) println(i + "==" + buffer(i))
    
      //没隔两个元素打印一次
      for (i <- 0 until(buffer.length, 2)) println(i + "==" + buffer(i))
    
      //倒序访问
      for (i <- (0 until buffer.length).reverse) println(i + "==" + buffer(i))
      //java 正常for循环
      for (elem <- buffer)
        println(elem)
    数组转换:

    val result = for (elem <- buffer) yield 2 * elem //将原buffer每个元素乘以2 返回一个新的ArrayBuffer
    将数组 得到数组中的所有偶数(3个方法 结果一样)
    <span style="font-family:Comic Sans MS;font-size:14px;"> for (elem <- buffer if elem % 2 == 0) yield 2 * elem
    
      buffer.filter(_ % 2 == 0).map(2 * _)
      buffer.filter {
        _ % 2 == 0
      } map {
        2 * _
      }</span>
      //给定一个buffer数组,移除第一个负数之外的所有负数
    
      var first = true
      var indexes = for (i <- 0 until buffer.length if first || buffer(i) > 0) yield {
        if (buffer(i) < 0) first = false; i
      }
      //将大于0的数字排列到前面去
      for (j <- 0 until (indexes.length)) buffer(j) = buffer(indexes(j))
      buffer.trimEnd(buffer.length - indexes.length)
    常用算法:
      //求和
      Array(1, 7, 8, 9).sum //对于ArrayBuffer 同样适用
    
      ArrayBuffer("java", "scala", "python", "golang", "c/c++", "R").max
    
      Array(1, 7, 8, 9).sorted //按照自然顺序排序
      Array(1, 7, 8, 9).sortWith(_>_) //按照从大到小排序
      Sorting.quickSort(Array(1, 7, 8, 9)) //只能操作数组 不能对buffer排序
      Array(1, 7, 8, 9).mkString("(",",",")") //显示数组,可以直接使用print打印
      buffer.count(_>0)  //返回所有大于0的计数




    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课
    bzoj1640 [Usaco2007 Nov]Best Cow Line 队列变换
    bzoj1639 [Usaco2007 Mar]Monthly Expense 月度开支
    bzoj1637 [Usaco2007 Mar]Balanced Lineup
    bzoj1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
    bzoj1635 [Usaco2007 Jan]Tallest Cow 最高的牛
    bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通
    bzoj3407 [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题
    bzoj1631 [Usaco2007 Feb]Cow Party
    bzoj1632 [Usaco2007 Feb]Lilypad Pond
  • 原文地址:https://www.cnblogs.com/re-myself/p/5532488.html
Copyright © 2020-2023  润新知