Scala學習筆記之:tuple、array、Map



本文《快學Scala》的筆記

tuple學習筆記

tuple的定義

對偶是元組(tuple)的最簡單形態——元組是不同類型的值的聚集。
元組的值是通過將單個值包含在圓括號中構成。Example:(1,1.3415,“Fred”)

tuple的訪問

可以通過_1,_2,_3訪問元組的元素
val first = tuple._1 //元組的位置從1開始,而非從0開始

拉鏈操作:zip

通過操作元組,可以把多個值綁在一起,以便它們能夠被一起處理,可以通過zip方法完成。
    val symbols = Array("<",">")
    val counts = Array("1","2")
    val paris = symbols.zip(counts)
    val map = pairs.toMap
    ```
##array學習筆記
###數組要點
- 若長度固定則使用Array,若長度可能有變化則使用ArrayBuffer
- 提供初始值時不要使用new
- 用()來訪問元素
- 用for(elem <- arr) 來遍歷元素
- 用for(elem <- array if ...) ... yield 來將原數組轉型為新數組
- Scala數組和Java數組可以互操作,用ArrayBuffer,使用scala.collection.JavaConversions中的轉換函數。

###定長數組
如果數組長度不變,則可使用scala中的Array,例如:
```scala
val nums = new Array[Int](10)    //10個整數的數組,所有元素初始化為0
val string = new Array[String](10) //10個元素的字符串數組,所有元素被初始化為null
val s = Array("hello","scala")  //長度為2的Array[String]——類型是推斷出來的。已提供初始值,不需要new

變長數組

對於那種長度按需要變化的數組,Java有ArrayList,C++有vector。Scalable中有等效的數據結構為:ArrayBuffer

import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()
//或者new ArrayBuffer[Int]
//一個空的數組緩沖,准備存放整數
b += 1   //ArrayBuffer(1),用+=在尾部添加元素
b += (1,2,3,4)     //在尾部添加多個元素
 
b ++= Array(8,12,13)   //可以用++=操作符追加任何集合
b.trimEnd(5)  //移除最后5個元素

//在任意 位置添加元素
b.insert(2,6)   //在下標2之前插入
b.insert(2,6,7,8)   //在下標2之前插入6,7,8

b.remove(2)   //移除下標為2的位置開始移除元素
b.remove(2,3)  //從下標為2開始移除3個元素;第二個參數是表示移除元素的個數

在使用時,有時不確定數組需要裝元素的個數。此時,可以先構建一個數組緩沖,然后調用

b.toArray   //將緩沖數組轉換為定長數組

定長數組也可以轉換為緩沖數組

a.toBuffer

遍歷數組和數組緩沖

使用for循環遍歷數組和數組緩沖

  • 使用下標的方式
for (i <- 0 until a.length){
	println( i + ":" + a(i))
}

until用法擴展:
- 這只步長
scala 0 until (a.length,2)
- 從數組尾部開始
scala (0 until a.length).reverse

  • 不使用下標訪問數組元素
for (elem <- arrName) {println(elem)}

數組轉換

val a = Array(2,3,4)
val result = for (elem <- a) yield 2 * elem
for (elem <-  a if elem %2==0) yield 2 * elem

常用算法

  • sum: Array(1,2,3).sum
  • max/min : Array(1,2,3).max/min
  • sorted : Array(1,2,3).sorted(_ < ) ; Array(1,2,3).sorted( > _) //不能對緩沖數組排序
  • quickSort方法排序:scala.util.Sorting.quickSort(a)
  • 顯示數組內容:mkString; a.mkString(" and ") //可以設置分隔符

多維數組

val matrix = Array.ofDimDouble

Map學習筆記

構造映射

val scores = Map("alice" -> 10,"Bob" -> 12)
val scores = Map(("alice",10),("Bob",2))

獲取映射中的值

val bob = scores("Bob")
//驗證是否包含某個指定的鍵
val bobscore = if (scores.contains("Bob")) scores("Bob") else 0
快捷方式:val bobscores = scores.getOrElse("Bob",0)

  • 為映射添加多個關系:scores += ("bob" -> 2,"t" -> 3)

迭代映射

通過循環即可遍歷映射中所有的鍵/值對偶
for ((k,v) <- ma) 處理k,v

只訪問key和value

  • keySet :scores.keySet
  • values:scores.values ;for (v <- scores.values) println(v)

排序

val scores = scala.collections.immutable.SortedMap(scores)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM