在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下)
不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的
可变数组指的是长度和数组中角标对应的元素都是可变的。
object ArrayDemo { def main(args: Array[String]): Unit = { /** * 不可变数组一旦初始化,数组的长度就是不可变的,不能往数组中添加任 * 何元素 */ val arr = Array[Int](1, 2, 3, 4, 5) // 如果数组中,有不同类型的元素,那么这个数组的类型就是这些元素的公共父类型 Any val arr1: Array[Any] = Array(1, 2, "leo") // 创建了一个数组,给数组的初始化长度为5,每个角标的初始长度和泛型的初始值一致,也就是 0 val arr2 = new Array[Int](5) // 创建一个数组,数组的长度是 1 ,数组的元素是 5 val arr3 = Array(5) // ++ 运算符合并两个数组,原来的数组并没有改变,只是生成了个新的数组。 val arr4 = arr ++ arr2 /** * 可变长数组 */ val buffer1 = ArrayBuffer[Int]() buffer1 += 1 buffer1 ++= arr buffer1 ++= ArrayBuffer(6, 7, 8) // 添加数组 // 更改指定角标的值 buffer1(1) = 11 // append 方式添加 buffer1.append(12, 13, 14) buffer1 -= 12 println(buffer1) // ArrayBuffer(1, 11, 2, 3, 4, 5, 6, 7, 8, 13, 14) // 移除数组 如果要移除的元素不存在,不会报错 buffer1 --= Array(1, 2, 15) println(buffer1) // ArrayBuffer(11, 3, 4, 5, 6, 7, 8, 13, 14) // 移除指定下表对应的元素 buffer1.remove(5) // 从指定角标开始移除指定个元素 buffer1.remove(3, 2) } }
/** * 数组的常用方法 */ val arr = Array(1, 2, 3, 4, 5) // 最大值 println(arr.max) // 最小值 println(arr.min) //maString 拼接 println(arr.mkString("")) // 12345 println(arr.mkString(",")) // 1,2,3,4,5 println(arr.mkString("[", ",", "]")) //[1,2,3,4,5]
/** * 数组的转换操作 */ val intarr = Array(1,2,3,12,5,7) intarr.map((x: Int)=> x * 2) .sortBy((x: Int)=> x) //排序 .reverse // 将数组反转 .foreach((x:Int)=>println(x)) intarr.map(_ * 2).sortBy(x =>x).reverse.foreach(println(_)) var strarr = Array("hello world","hello china") strarr.map(x => { val fields = x.split(" ") fields }).flatten.foreach(println(_)) strarr.flatMap((x: String)=>{x.split(" ")}).foreach(println(_))
相关:
1、foreachforeach和map相似,只不过它没有返回值,foreach只要是为了对参数进行作用。比如 names.foreach{name=>println(name)}2、flattenflatten可以把嵌套的结构展开. scala> List(List(1,2),List(3,4)).flattenres0: List[Int] = List(1, 2, 3, 4)3、flatmapflatMap结合了map和flatten的功能。接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。scala> List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2))res5: List[Int] = List(2, 4, 6, 8)