Scala快速入门-3-常用数组操作

Posted by Yezhiwei on January 2, 2018

知识点

  • 长度固定使用Array,长度有变化使用ArrayBuffer
  • 提供初始值时不要使用new
  • 用()来访问元素
  • for(elem <- arr)遍历元素
  • for(elem <- arr if …) yield …将原数组转为新数组

定长数组

  • 10个整数的数组,所有元素初始为0
scala> val nums = new Array[Int](10)
nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  • 10个元素的字符中数组,所有元素初始化为null
scala> val str = new Array[String](10)
str: Array[String] = Array(null, null, null, null, null, null, null, null, null, null)
  • 提供初始值就不需要new,长度为2的Array[String],类型是推断出来的
scala> val str1 = Array("Hello", "Scala")
str1: Array[String] = Array(Hello, Scala)
  • 使用()来访问元素
scala> val s = str1(0)
s: String = Hello

变长数组

  • 与Java中ArrayList功能等效的数据结构ArrayBuffer
  • 初始化一个空的可变长数组,准备存入整数
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val b = ArrayBuffer[Int]()
b: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
  • 用+=在尾添加元素或多个用括号包都来的元素
scala> b += 1
res0: b.type = ArrayBuffer(1)

scala> b += (1, 2, 3)
res1: b.type = ArrayBuffer(1, 1, 2, 3)
  • 用++=操作符追加任何集合
scala> b ++= Array(6, 8, 9)
res2: b.type = ArrayBuffer(1, 1, 2, 3, 6, 8, 9)
  • 移除最后2个元素
scala> b.trimEnd(2)

scala> b
res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 6)
  • 可在任意位置插入或移除元素(不高效,所有在那个位置后面的元素都必须被平移)
// 在下标2之前插入
scala> b.insert(2, 4)

scala> b
res6: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 4, 2, 3, 6)

// 在下标2之前插入多个元素
scala> b.insert(2, 4, 5)

scala> b
res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 4, 5, 4, 2, 3, 6)
  • 定长数组与变长数据转换
// 转成定长数组
scala> b.toArray
res9: Array[Int] = Array(1, 1, 4, 5, 4, 2, 3, 6)


// 转成变长数组
scala> b.toBuffer
res10: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 1, 4, 5, 4, 2, 3, 6)

遍历数组

// 使用下标访问
scala> for (i <- 0 until b.length)
     | println(i + ":" + b(i))
0:1
1:1
2:4
3:5
4:4
5:2
6:3
7:6

// 不使用下标
scala> for(elem <- b)
     | println(elem)
1
1
4
5
4
2
3
6

数组转换

  • for推导式,从一个数组转换,生成一个全新的数组
scala> val a = Array(2, 3, 5, 7)
a: Array[Int] = Array(2, 3, 5, 7)

scala> val res = for(elem <- a) yield 2 * elem
res: Array[Int] = Array(4, 6, 10, 14)

scala> a
res13: Array[Int] = Array(2, 3, 5, 7)
  • for推导式,从一个ArrayBuffer转换,生成一个全新的ArrayBuffer
scala> a.toBuffer
res14: scala.collection.mutable.Buffer[Int] = ArrayBuffer(2, 3, 5, 7)

scala> val res = for(elem <- res14) yield 2 * elem
res: scala.collection.mutable.Buffer[Int] = ArrayBuffer(4, 6, 10, 14)

敬请期待下一篇~