最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Scala day 19 (List & ListBuffer)List

XAMPP下载 admin 703浏览 0评论
scala 的 List 是 immutable 的,所以不管相加或新增元素只要變動的話,都會產生一個新的 List.
List 有個 method 是 :::,可將 2 個 List 串接起來.

scala> val alist = List(1, 2)
alist: List[Int] = List(1, 2)

scala> val blist = List(3, 4 , 5)
blist: List[Int] = List(3, 4, 5)

scala> val clist = alist ::: blist
clist: List[Int] = List(1, 2, 3, 4, 5)
還有一個 method 是 :: ,叫 cons,它會在一個已存在的 List 最前面再加上一個 element :

scala> val names = List(“Sam”,”Jack”,”Mike”)
names: List[String] = List(Sam, Jack, Mike)

scala> val newNames = “Daniel” :: names
newNames: List[String] = List(Daniel, Sam, Jack, Mike)
要宣告一個空的 List 可用 List() 或 Nil.

scala> val emptyList = Nil
emptyList: scala.collection.immutable.Nil.type = List()
一般運算子是從左邊優先執行,例如 : (1 * 2) * 3.呼叫方法可以看成 (1).*(2).

scala> val sum = 1 * 2 * 3
sum: Int = 6
但如果運算子的結尾是冒號(Colon, : ),方法會從右邊開始執行,例如 : 1 :: (2 :: (3 :: Nil)).呼叫方法可以看成 Nil.::(3).

scala> val testlist = 2 :: 3 :: Nil
testlist: List[Int] = List(2, 3)

scala> val testlist = Nil.::(3).::(2)
testlist: List[Int] = List(2, 3)
Int 2 並沒有提供 :: 方法,所以會出錯,所以要在後面在加上有提供 :: 的物件:

scala> val testlist = Nil :: 3 :: 2
<console>:11: error: value :: is not a member of Int
val testlist = Nil :: 3 :: 2
^

scala> val testlist = Nil :: 3 :: 2 :: Nil
testlist: List[Any] = List(List(), 3, 2)
List 一些好用的 method
迴圈

scala> val numList = 65 :: 81 :: 67 :: 72 :: 73 :: 90 :: Nil
numList: List[Int] = List(65, 81, 67, 72, 73, 90)

scala> numList.foreach((num: Int) => println(num.toChar))
A
Q
C
H
I
Z
排序:

scala> val numList = 5 :: 1 :: 7 :: 2 :: 3 :: 9 :: Nil
numList: List[Int] = List(5, 1, 7, 2, 3, 9)

scala> numList.sortWith(_ < _)
res9: List[Int] = List(1, 2, 3, 5, 7, 9)
可以定義排序的方法,給 sortWith 排序

scala> val names = List(“Sam”,”Daniel”,”Jack”,”Loues”,”Mike”)
names: List[String] = List(Sam, Daniel, Jack, Loues, Mike)

scala> def sortByLength(str1: String ,str2: String) = str1.length < str2.length
sortByLength: (str1: String, str2: String)Boolean

scala> names.sortWith(sortByLength).foreach(println)
Sam
Jack
Mike
Loues
Daniel
取得 element 只要用 List名稱(index),index 從 0 開始 :

scala> names(3)
res21: String = Loues
使用 filter 過濾掉不要的 element :

scala> names.filter(_ != “Jack”)
res27: List[String] = List(Sam, Daniel, Loues, Mike)
利用 mkString 將 List 的 elements 組合起來變成一個 String,elements 之間用 mkString 的參數做分隔(這邊用,) :

scala> names.mkString(“,”)
res18: String = Sam,Daniel,Jack,Loues,Mike
ListBuffer
List 是 immutable,但是 ListBuffer 是 mutable 的 :
使用前需要 import scala.collection.mutable.ListBuffer

scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer
new 一個空的 ListBuffer :

scala> val names = new ListBuffer[String]()
names: scala.collection.mutable.ListBuffer[String] = ListBuffer()
新增元素 :

scala> names += “Daniel”
res52: names.type = ListBuffer(Daniel)

scala> names += (“Jack”,”Ray”)
res53: names.type = ListBuffer(Daniel, Jack, Ray)
刪除元素 :

scala> names -= “Jack”
res54: names.type = ListBuffer(Daniel, Ray)

scala> names += (“Daniel”,”Jack”,”Ray”,”Lucy”,”Allen”,”Petty”)
res62: names.type = ListBuffer(Daniel, Jack, Ray, Lucy, Allen, Petty)

scala> names -= (“Jack”,”Allen”)
res63: names.type = ListBuffer(Daniel, Ray, Lucy, Petty)
刪除 Seq 的元素 :

scala> names –= Seq(“Daniel”,”Lucy”)
res64: names.type = ListBuffer(Ray, Petty)

最後可再把它轉成 immutable 的 List :

scala> names.toList
res65: List[String] = List(Ray, Petty)
總結
scala 的 List 是 immutable,所以在使用上無法去直接 update 裡面的元素,可能要運用 insert 及 filter 的功能來達到 update 的效果.
List 在程式很常用到,ListBuffer 透過運算子就可以刪除新增元素使用起來很方便.

转载请注明:XAMPP中文组官网 » Scala day 19 (List & ListBuffer)List

您必须 登录 才能发表评论!