1.Scala中提供了一種數據結構-數組,其中存儲相同類型的元素的固定大小的連續集合。數組用於存儲數據的集合,但它每每是更加有用認爲數組做爲相同類型的變量的集合javascript
2 聲明數組變量:java
要使用的程序的數組,必須聲明一個變量來引用數組,必須指定數組變量能夠引用的類型。下面是語法聲明數組變量:es6
var z:Array[String] = new Array[String](3) or var z = new Array[String](3) or var z = Array("Zara", "Nuha", "Ayan")
在這裏,z被聲明爲字符串數組,最多可容納三個元素。能夠將值分配給獨立的元素或能夠訪問單個元素,這是能夠作到經過使用相似於如下命令:數組
z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"
3.Scala中數組方法:
如下是重要的方法,能夠同時使用數組。如上所示,則必須使用任何說起的方法以前,要導入Array._包。有關可用方法的完整列表,請Scala中的官方文件。數據結構
SN | 方法及描述 |
---|---|
1 | def apply( x: T, xs: T* ): Array[T] 建立T對象,其中T能夠是Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean數組。 |
2 | def concat[T]( xss: Array[T]* ): Array[T] 鏈接全部陣列成一個數組。 |
3 | def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit 複製一個數組到另外一個。至關於Java的System.arraycopy(src, srcPos, dest, destPos, length). |
4 | def empty[T]: Array[T] 返回長度爲0的數組 |
5 | def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T] 返回一個包含一個函數的重複應用到初始值的數組。 |
6 | def fill[T]( n: Int )(elem: => T): Array[T] 返回包含某些元素的計算的結果的次數的數組。 |
7 | def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 返回一個二維數組,其中包含某些元素的計算的結果的次數。 |
8 | def iterate[T]( start: T, len: Int)( f: (T) => T ): Array[T] 返回一個包含一個函數的重複應用到初始值的數組。 |
9 | def ofDim[T]( n1: Int ): Array[T] 建立數組給出的尺寸。 |
10 | def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]] 建立了一個2維數組 |
11 | def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]] 建立3維數組 |
12 | def range( start: Int, end: Int, step: Int ): Array[Int] 返回包含一些整數間隔等間隔值的數組。 |
13 | def range( start: Int, end: Int ): Array[Int] 返回包含的範圍內增長整數序列的數組。 |
14 | def tabulate[T]( n: Int )(f: (Int)=> T): Array[T] 返回包含一個給定的函數的值超過從0開始的範圍內的整數值的數組。 |
15 | def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]] 返回一個包含給定函數的值超過整數值從0開始範圍的二維數組。 |
1 package first.scala 2 3 import scala.collection.mutable.ArrayBuffer 4 import sun.org.mozilla.javascript.internal.ast.Yield 5 6 object ScalaInAction { 7 //scala.Array 8 9 /******************************************************************************************************************************/ 10 //定長數組 11 //聲明數組方式一:類型,大小 12 val nums = new Array[Int](10) //> nums : Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 13 val a = new Array[String](10) //> a : Array[String] = Array(null, null, null, null, null, null, null, null, n 14 //| ull, null) 15 //聲明方式二:能夠經過類型推斷,推斷出數組的類型 16 val s = Array("hello" , "world") //> s : Array[String] = Array(hello, world) 17 18 s(0) = "goodbye" 19 20 21 //可變數組 22 val b = ArrayBuffer[Int]() //> b : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer() 23 24 b += 1 //> res0: first.scala.ScalaInAction.b.type = ArrayBuffer(1) 25 b += (1,2,3,4) //> res1: first.scala.ScalaInAction.b.type = ArrayBuffer(1, 1, 2, 3, 4) 26 b ++= Array(12,15,63) //> res2: first.scala.ScalaInAction.b.type = ArrayBuffer(1, 1, 2, 3, 4, 12, 15, 27 //| 63) 28 //刪除最後的2個元素 29 b.trimEnd(2) 30 b //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4, 31 //| 12) 32 //給定索引處插入 數據 33 b.insert(2, 15) 34 b //> res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 15, 2, 3 35 //| , 4, 12) 36 37 //刪除索引爲2的元素 38 b.remove(2) //> res5: Int = 15 39 40 //轉換爲數組,類型的變換 41 b.toArray //> res6: Array[Int] = Array(1, 1, 2, 3, 4, 12) 42 b //> res7: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4, 43 //| 12) 44 45 /*******************************************************************************************************/ 46 //數組的進階操做 47 48 for(i <- 0 until a.length) 49 println(i + " : " + a(i)) //> 0 : null 50 //| 1 : null 51 //| 2 : null 52 //| 3 : null 53 //| 4 : null 54 //| 5 : null 55 //| 6 : null 56 //| 7 : null 57 //| 8 : null 58 //| 9 : null 59 60 61 val c = Array(2,5,8,9,18) //> c : Array[Int] = Array(2, 5, 8, 9, 18) 62 val result = for(elem <- c) yield 2 * elem 63 //> result : Array[Int] = Array(4, 10, 16, 18, 36) 64 65 //將c中的偶數乘2 66 for(elem <- c if elem % 2 == 0 ) yield 2 * elem 67 //> res8: Array[Int] = Array(4, 16, 36) 68 69 //spark中方式,和上面的效果同樣。先過濾後map 70 c.filter( _ % 2 == 0).map(2 * _) //> res9: Array[Int] = Array(4, 16, 36) 71 72 //求和 73 Array(1,2,3).sum //> res10: Int = 6 74 75 76 //獲取最長的字符串 77 ArrayBuffer("Mary", "had", "a", "little", "lamb").max 78 //> res11: String = little 79 80 //排序,默認升序排序 81 val d = ArrayBuffer(1,7,2,9) //> d : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 7, 2, 9) 82 val bSorted = d.sorted //> bSorted : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7, 83 //| 9) 84 85 //快速排序 86 val e = Array(1,7,2,9) //> e : Array[Int] = Array(1, 7, 2, 9) 87 scala.util.Sorting.quickSort(e) 88 89 //定義元素鏈接方式 90 e.mkString(" and ") //> res12: String = 1 and 2 and 7 and 9 91 //定義元素鏈接方式 92 a.mkString("<", "," , ">") //> res13: String = <null,null,null,null,null,null,null,null,null,null> 93 94 95 /**************************************************************************************************************************/ 96 97 98 //定義多維數組方法: Array.ofDim[Double](3,4) 99 val matrix = Array.ofDim[Double](3,4) //> matrix : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0 100 //| , 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0)) 101 matrix(2)(1) = 42 102 103 matrix //> res14: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0 104 //| .0, 0.0, 0.0), Array(0.0, 42.0, 0.0, 0.0)) 105 val triangle = new Array[Array[Int]](10) 106 //> triangle : Array[Array[Int]] = Array(null, null, null, null, null, null, n 107 //| ull, null, null, null) 108 109 110 for(i <- 0 until triangle.length) 111 triangle(i) = new Array[Int](i + 1) 112 triangle //> res15: Array[Array[Int]] = Array(Array(0), Array(0, 0), Array(0, 0, 0), Arr 113 //| ay(0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0), Array(0, 0, 114 //| 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0 115 //| , 0), Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) 116 117 118 119 120 }