【图文详细 】Scala——Scala 数组 Array

4、Scala 数组 Array 

4.1、定长数组和变长数组 

1、由于 Array 是不可变(长度不可变)的,初始化之初就有了固定的长度,所以不能直接 地对其元素进行删除操作,也不能多增加元素,只能修改某个位置的元素的值,要实现删除 可以通过过滤生成新的 Array 的方式来删除不要的元素。所以也就没有 add,insert,remove 等 操作。 
 
2、而 ArrayBuffer 是可变的,本身提供了很多元素的操作,当然包括增加,删除操作。 
 
3、如果你需要在 Array 和 ArrayBuffer 之间转换,那么分别调用 toBuffer()和 toArray()方法即可

package com.mazh.scala.core 
 
import scala.collection.mutable.ArrayBuffer 
object ArrayDemo { 
 
  def main(args: Array[String]) { 
 
    // 初始化一个长度为 8
的定长数组,其所有元素均为 0 
    val arr1 = new Array[Int](8) 
    // 直接打印定长数组,内容为数组的 hashcode
值 
    println(arr1) 
    // 将数组转换成数组缓冲,就可以看到原数组中的内容了     //toBuffer 会将数组转换长数组缓冲     println(arr1.toBuffer) 
 
    // 注意:如果 new ,相当于调用了数组的 apply
方法,直接为数组赋值 
    // 初始化一个长度为 1
的 定长数组 
    val arr2 = Array[Int](10) 
    println(arr2.toBuffer) 
 
    // 定义一个长度为 3
的定长数组 
    val arr3 = Array("hadoop", "storm", "spark") 
    // 使用 () 来访问元素     println(arr3(2)) 
 
    ////////////////////////////////////////////////// 
    // 变长数组(数组缓冲)     // 如果想使用数组缓 冲,需要导入 import scala.collection.mutable.ArrayBuffer
包 
    val ab = ArrayBuffer[Int]() 
    // 向数组缓冲的尾部追加一个元素     //+= 尾部追加元素     ab += 1 
    // 追加多个元素     ab += (2, 3, 4, 5) 
    // 追加一个数组 ++= 
    ab ++= Array(6, 7) 
    // 追加一个数组缓冲     ab ++= ArrayBuffer(8,9) 
    // 打 印数组缓冲 ab 
 
    // 在数组某个位置插入元素用 insert 
    ab.insert(0, -1, 0) 
    // 删除数组某个位置的元素用 remove 
 ab.remove(8, 2) 
 
    println(ab) 
  } 
} 

【图文详细 】Scala——Scala 数组 Array_第1张图片

 

4.2、遍历数组 

1、增强 for 循环

2、使用 to 可以生成序列,0 to 10 包含 0 包含 10

3、好用的 until 会生成脚标,0 until 10 包含 0 不包含 10 

package com.mazh.scala.core 
object ArrayForDemo { 
 
  def main(args: Array[String]) { 
    // 初始化一个数组     val arr = Array(1,2,3,4,5,6,7,8) 
    // 增强 for循环 
    for(i <- arr) 
      println(i) 
 
    // 使用 to可以生成一个序列作为脚标 
    for(i <- (0 to arr.length - 1).reverse) 
      println(arr(i)) 
 
    // 好用的 until会生成一个 Range,reverse是将前面生成的 Range反转 
    for(i <- (0 until arr.length).reverse) 
      println(arr(i)) 
 
    // 步长为 2 
    for(i <- (0 until (arr.length, 2)).reverse) 
      println(arr(i)) 
  } 
} 

 

4.3、数组转换 

yield 关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变 

【图文详细 】Scala——Scala 数组 Array_第2张图片

package com.mazh.scala.core 
object ArrayYieldDemo { 
  def main(args: Array[String]) { 
    // 定义一个数组     val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) 
    // 将偶数取出乘以 10后再生成一个新的数组 
    val res = for (e <- arr if e % 2 == 0) yield e * 10 
    println(res.toBuffer) 
    // 更高级的写法 , 用着更爽     
    //filter 是过滤,接收一个返回值为 boolean的函数 
    //map相当于将数组中的每一个元素取出来,应用传进去的函数 
    val r = arr.filter(_ % 2 == 0).map(_ * 10) 
    println(r.toBuffer) 
  } 
} 

 

4.4、数组常用算法

在 Scala 中,数组上的某些方法对数组进行相应的操作非常方便! 

【图文详细 】Scala——Scala 数组 Array_第3张图片

 

4.5、多维数组 

【图文详细 】Scala——Scala 数组 Array_第4张图片

你可能感兴趣的:(Scala)