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的计数




posted @ 2015-08-06 16:25  傾聽雨落  阅读(323)  评论(0编辑  收藏  举报