Scala——三個容器:List Set Map

weixin_46880810發表於2020-09-26

列表(List)

intList定義一個列表,intList.head返回列表頭部,也就是第一個值,而intList.tail返回的是列表的尾部但返回值仍是一個列表
例如:

scala> val intList = List(1,2,3,4,5,6,7,8)
intList: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)

scala> intList.head
res17: Int = 1

scala> intList.tail
res18: List[Int] = List(2, 3, 4, 5, 6, 7, 8)


列表的頭部增加新的元素`運用 ::

scala> val intListOther = 0::intList
intListOther: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8)

Nil表示空列表

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

利用 ::連線兩個列表

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

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

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

scala> val intList3 = intList1:::intList2
intList3: List[Int] = List(1, 2, 3, 4)

利用intList.sum函式求和

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

scala> b.sum
res4: Int = 7

集(set)

建立一個集合

scala> var mySet=Set("wuhan","yangtuo")
mySet: scala.collection.immutable.Set[String] = Set(wuhan, yangtuo)

向集合中新增元素

scala> mySet +="laosi"

scala> mySet
res6: scala.collection.immutable.Set[String] = Set(wuhan, yangtuo, laosi)

如果想在不可變val資料集中新增元素時是會出現報錯的,所以需要宣告為var,這時候我們需要呼叫 import scala.collection.mutable.Set包

例如:
向不可變資料集val中新增元素時是會出現報錯

scala> val mySet=Set("wuhan","yangtuo")
mySet: scala.collection.immutable.Set[String] = Set(wuhan, yangtuo)

scala> mySet +="laosi"
<console>:20: error: value += is not a member of scala.collection.immutable.Set[String]
       mySet +="laosi"
             ^

所以要宣告為var才能新增進去

scala> import scala.collection.mutable.Set
import scala.collection.mutable.Set

scala> val mySet=Set("wuhan","yangtuo")
mySet: scala.collection.mutable.Set[String] = Set(wuhan, yangtuo)

scala> mySet +="laosi"
res11: mySet.type = Set(wuhan, laosi, yangtuo)

雖然可變集和不可變集都有新增或刪除元素的操作,但是,二者有很大的區別。對不可變集進行操作,會產生一個新的集,原來的集並不會發生變化。 而對可變集進行操作,改變的是該集本身。

對映(Map)

對映(Map)是一系列鍵值對的集合,所有的值,都可以通過鍵來獲取。

建立一個不可變對映
例如:

scala> val dashuju = Map("a" -> "wuhan", "b" -> "yangtuo","c"->"laosi")
dashuju: scala.collection.immutable.Map[String,String] = Map(a -> wuhan, b -> yangtuo, c -> laosi)

獲取對映中的值

scala> println(dashuju("a"))
wuhan

使用contains方法檢視對映中是否存在某個鍵

scala> val a=if(dashuju.contains("a")) dashuju("a") else 0
a: Any = wuhan

scala> val a=if(dashuju.contains("d")) dashuju("d") else 0
a: Any = 0

向不可變val對映中新增元素時是會出現報錯,所以要宣告為var才能新增進去

scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map
scala> val dashuju = Map("a" -> "wuhan", "b" -> "yangtuo","c"->"laosi")
dashuju: scala.collection.mutable.Map[String,String] = Map(b -> yangtuo, a -> wuhan, c -> laosi)

scala> dashuju("d")="songjiahui"

也可以使用+=操作來新增新的元素

scala> dashuju +=("e"->"xinxin")
res1: dashuju.type = Map(e -> xinxin, b -> yangtuo, a -> wuhan, c -> laosi)

迴圈遍歷對映

格式:for ((k,v) <- 對映) 語句塊

利用printf 格式化迴圈輸出

%d 十進位制數字
%s 字串
%c 字元
%e 指數浮點數
%f 浮點數
%i 整數(十進位制)
%o 八進位制
%u 無符號十進位制
%x 十六進位制
%% 列印%
% 列印%

例如:
\n表示換行

scala> for((k,v)<-dashuju)printf("xuehao: %s ximing: %s\n",k,v)
xuehao: e ximing: xinxin
xuehao: b ximing: yangtuo
xuehao: a ximing: wuhan
xuehao: c ximing: laosi

列印所有的鍵keys

scala> for((k,v)<-dashuju)printf("xuehao: %s ximing: %s\n",k,v)
xuehao: e ximing: xinxin
xuehao: b ximing: yangtuo
xuehao: a ximing: wuhan
xuehao: c ximing: laosi

scala> for(k<-dashuju.keys)println(k)
e
b
a
c

列印所有的值values

scala> for(k<-dashuju.values)println(k)
xinxin
yangtuo
wuhan
laosi

相關文章