Scala基礎應用(6)- 常用對象,集合等

Scala基礎應用(6)- 常用對象,集合等

本章主要講解一些常用對象和集合類

1. 序列化(Ordered特質)

例子:
class Rational(n: Int, d: Int) extends Ordered[Rational] {
    def compare(that: Rational) =
        (this.number * that.denom) - (that.number * this.denom)
}

2. 數組 (Array)

  • 聲明數組變量

    var aArray: Array[類型] = new Array[類型] (數組大小)
    var aArray = new Array[類型] (數組大小)
    var aArray = Array(初始值1, 初始值2, ...)
    
    例子:
    var aArray : Array[String] = new Array[String] (10)
    for (i <- 0 to 9)
        aArray(i) = i.toString
    
    var aArray1 = new Array[String] (10)
    for (i <- 0 to (aArray1.length -1)) 
        aArray(i) = i.toString
    
    var aArray2 = Array("0", "1")  // 實際上執行的是Array.apply("0", "1")
    for (a <- aArray2)
        println (a)
    
    var emptyArray: Array[Nothing] = Array()
    var dimArray: Array[Array[String]] = Array (
        Array("One", "Two"),
        Array("Threee"),
        Array("Four", "Five")
    )
  • 多維數組

    Scala不直接支持多維數組,但提供多種方法實現任意維度的數組

    var multipleArray = Array.ofDim[Int](3,3)
    for (i <- 0 to 2; j <- 0 to 2)
        multipleArray(i)(j) = i * j
  • 連接數組

    var array1 = Array("one", "two")
    var array2 = Array("three")
    
    var combinedArray = Array.concat(array1, array2)
  • 範圍數字數組 (只支持數字 Int)

    var numberArray1 = Array.range(0, 100, 2)  // 其中2爲步進值
    var numberArray2 = Array.range(0, 100)     // 缺省步進值爲1

3. 列表 (List)

  • 變量聲明與數組相同,上面數組聲明部分將Array改成List都可以工作, 但List不可變,即使用var聲明是沒有意義的
  • Nil 爲空列表
  • 連接列表

    var aList1 = List("One", "Two")
    var aList2 = List("Three")
    var aString = "Four"
    var aList4 = List("Five", "Six")
    
    var combinedList0 = List.concat(aList1, aList2)
    var combinedList1 = aList1 ::: aList2
    var combinedList2 = aString :: aList4
    var combinedList3 = "First" :: Nil
    var combinedList4 = "First" :: ("Second" :: Nil)
  • 列表頭: head, 列表尾: tail

  • 統一列表: List.fill(次數)(值)
  • 製成表格列表: List.tabulate(元素數量,維度) (函數) // 維度缺省爲1

    val square = List.tabulate(5) (n => n * n)
    val dim = List.tabulate(4, 5) (_ * _)
    val dim2 = List.tabulate(4,5) ((x, y) => x * y) // 也上面等同
  • 反序: aList.reverse

4. 集 (Set)

5. 映射 (Map)

6. 元組 (Tuple)

7. Option

8. 迭代(Iterator)

9. 集合可變與不可變層級圖

  • 集合層級圖

這裏寫圖片描述

  • 可變集合層級圖

這裏寫圖片描述

  • 不可變集合層級圖

這裏寫圖片描述

10. 附表

  • Array

    序號聲明說明
    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開始範圍的二維數組。
  • List

    序號聲明說明
    1def +(elem: A): List[A]前置一個元素列表
    2def ::(x: A): List[A]在這個列表的開頭添加的元素。
    3def :::(prefix: List[A]): List[A]增加了一個給定列表中該列表前面的元素。
    4def ::(x: A): List[A]增加了一個元素x在列表的開頭
    5def addString(b: StringBuilder): StringBuilder追加列表的一個字符串生成器的所有元素。
    6def addString(b: StringBuilder, sep: String): StringBuilder追加列表的使用分隔字符串一個字符串生成器的所有元素。
    7def apply(n: Int): A選擇通過其在列表中索引的元素
    8def contains(elem: Any): Boolean測試該列表中是否包含一個給定值作爲元素。
    9def copyToArray(xs: Array[A], start: Int, len: Int): Unit列表的副本元件陣列。填充給定的數組xs與此列表中最多len個元素,在位置開始。
    10def distinct: List[A]建立從列表中沒有任何重複的元素的新列表。
    11def drop(n: Int): List[A]返回除了第n個的所有元素。
    12def dropRight(n: Int): List[A]返回除了最後的n個的元素
    13def dropWhile(p: (A) => Boolean): List[A]丟棄滿足謂詞的元素最長前綴。
    14def endsWith[B](that: Seq[B]): Boolean測試列表是否使用給定序列結束。
    15def equals(that: Any): Booleanequals方法的任意序列。比較該序列到某些其他對象。
    16def exists(p: (A) => Boolean): Boolean測試謂詞是否持有一些列表的元素。
    17def filter(p: (A) => Boolean): List[A]返回列表滿足謂詞的所有元素。
    18def forall(p: (A) => Boolean): Boolean測試謂詞是否持有該列表中的所有元素。
    19def foreach(f: (A) => Unit): Unit應用一個函數f以列表的所有元素。
    20def head: A選擇列表的第一個元素
    21def indexOf(elem: A, from: Int): Int經過或在某些起始索引查找列表中的一些值第一次出現的索引。
    22def init: List[A]返回除了最後的所有元素
    23def intersect(that: Seq[A]): List[A]計算列表和另一序列之間的多重集交集。
    24def isEmpty: Boolean測試列表是否爲空
    25def iterator: Iterator[A]創建一個新的迭代器中包含的可迭代對象中的所有元素
    26def last: A返回最後一個元素
    27def lastIndexOf(elem: A, end: Int): Int之前或在一個給定的最終指數查找的列表中的一些值最後一次出現的索引
    28def length: Int返回列表的長度
    29def map[B](f: (A) => B): List[B]通過應用函數以g這個列表中的所有元素構建一個新的集合
    30def max: A查找最大的元素
    31def min: A查找最小元素
    32def mkString: String顯示列表的字符串中的所有元素
    33def mkString(sep: String): String顯示的列表中的字符串中使用分隔串的所有元素
    34def reverse: List[A]返回新列表,在相反的順序元素
    35def sorted[B >: A]: List[A]根據排序對列表進行排序
    36def startsWith[B](that: Seq[B], offset: Int): Boolean測試該列表中是否包含給定的索引處的給定的序列
    37def sum: A概括這個集合的元素
    38def tail: List[A]返回除了第一的所有元素
    39def take(n: Int): List[A]返回前n個元素
    40def takeRight(n: Int): List[A]返回最後n個元素
    41def toArray: Array[A]列表以一個數組變換
    42def toBuffer[B >: A]: Buffer[B]列表以一個可變緩衝器轉換
    43def toMap[T, U]: Map[T, U]此列表的映射轉換
    44def toSeq: Seq[A]列表的序列轉換
    45def toSet[B >: A]: Set[B]列表到集合變換
    46def toString(): String列表轉換爲字符串
  • Tuple

    序號聲明說明
    1
  • Set

    序號聲明說明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
  • Map

    序號聲明說明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
  • Option

    序號聲明說明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
  • Iterator

    序號聲明說明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章