Scala-元組、集合

1雳锋、元祖
映射是K/V對偶的集合黄绩,對偶是元組的最簡單形式,元組可以裝著多個不同類型的值玷过。
1)爽丹、創(chuàng)建元祖

//創(chuàng)建元祖時筑煮,用小括號那個多個元素括起來,元素之間用逗號隔開粤蝎,元素的類型可以不一樣咆瘟,元素個數(shù)也可以任意多個
scala> val tp = (1,3.3,"scala")
tp: (Int, Double, String) = (1,3.3,scala)

2)、獲取元祖的值

scala> tp._1
res37: Int = 1

scala> tp._2
res38: Double = 3.3

scala> tp._3
res39: String = scala

//使用下面這種方式更直觀
scala> val t , (a, b, c) = (2, 2.2, "scala")
t: (Int, Double, String) = (2,2.2,scala)
a: Int = 2
b: Double = 2.2
c: String = scala

scala> x
<console>:9: error: not found: value x
              x
              ^

scala> a
res43: Int = 2

scala> b
res44: Double = 2.2

scala> c
res45: String = scala

//對偶元祖加到map中
scala> val m = Map(1 -> "a", 2 -> "b")
m: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a)

scala> val t = (3,"c")
t: (Int, String) = (3,c)

scala> m += t
res40: m.type = Map(2 -> b, 1 -> a, 3 -> c)

scala> m
res41: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a, 3 -> c)

3)诽里、將對偶集合轉(zhuǎn)換成映射

scala> val arr = Array((1,"a"),(2,"b"))
arr: Array[(Int, String)] = Array((1,a), (2,b))

scala> val t = arr.toMap
t: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)

scala> t
res46: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)

4)袒餐、拉鏈操作
使用zip命令可以將集合中對應(yīng)的多個值綁定在一起

scala> val arr1 = Array(1,2,3)
arr1: Array[Int] = Array(1, 2, 3)

scala> val arr2 = Array("a","b","c")
arr2: Array[String] = Array(a, b, c)

scala> var arr3 = arr2.zip(arr1)
arr3: Array[(String, Int)] = Array((a,1), (b,2), (c,3))

scala> arr3
res47: Array[(String, Int)] = Array((a,1), (b,2), (c,3))

//如果其中一個元素要多,那么省去最后多余的
//即:如果兩個數(shù)組的元素個數(shù)不一致谤狡,拉鏈操作后生成的數(shù)組的長度為較小的那個數(shù)組的元素個數(shù)
scala> val arr4 = Array("a","b","c","d")
arr4: Array[String] = Array(a, b, c, d)

scala> var arr5 = arr4.zip(arr1)
arr5: Array[(String, Int)] = Array((a,1), (b,2), (c,3))
//arr4中多余的"d"就給省去了
scala> arr5
res49: Array[(String, Int)] = Array((a,1), (b,2), (c,3))

2灸眼、集合
Scala的集合有三大類:序列Seq、集Set墓懂、映射Map焰宣,所有的集合都擴展自Iterable特質(zhì)(trait)
在Scala中集合有可變(mutable)和不可變(immutable)兩種類型,immutable類型的集合初始化后就不能改變了(注意與val修飾的變量進行區(qū)別)

1)捕仔、序列
可認為java的List

//創(chuàng)建不可變集合
scala> val list = List(1,2,3,4)
list: List[Int] = List(1, 2, 3, 4)

//獲取序列中角標為0的元素
scala> list(0)
res50: Int = 1

//由于集合是不可變的所以企圖修改其中的值是行不通的
scala> list(0) = 6
<console>:10: error: value update is not a member of List[Int]
              list(0) = 6

//向集合中添加元素生成新的集合
//將0插入到lst1的前面生成一個新的List
scala> val list2 = 0 :: list
list2: List[Int] = List(0, 1, 2, 3, 4)

scala> list2
res52: List[Int] = List(0, 1, 2, 3, 4)

scala> val list3 = list.::(0)
list3: List[Int] = List(0, 1, 2, 3, 4)

scala> val list4 = 0 +: list
list4: List[Int] = List(0, 1, 2, 3, 4)

scala> val list5 = list.+:(0)
list5: List[Int] = List(0, 1, 2, 3, 4)

//將5添加到list最后面
scala> val list6 = list :+ 5
list6: List[Int] = List(1, 2, 3, 4, 5)

//將兩個list合并生成一個新的list
scala> list
res57: List[Int] = List(1, 2, 3, 4)

scala> val lst = List(1,5,6,7)
lst: List[Int] = List(1, 5, 6, 7)

scala> val ls = list ++ lst
ls: List[Int] = List(1, 2, 3, 4, 1, 5, 6, 7)

//將lst插入到list前生成一個新的list
scala> val ls2 = lst ++: list
ls2: List[Int] = List(1, 5, 6, 7, 1, 2, 3, 4)

下面是可變序列

//導入可變集合的所有包
scala> import scala.collection.mutable._
import scala.collection.mutable._

//創(chuàng)建可變序列(list)
scala> val lst = ListBuffer[Int]()
lst: scala.collection.mutable.ListBuffer[Int] = ListBuffer()

//直接賦值初始化
scala> val lst2 = ListBuffer(4,5,6,7)
lst2: scala.collection.mutable.ListBuffer[Int] = ListBuffer(4, 5, 6, 7)
//添加元素匕积,以下有兩種方式添加元素。注意:沒有生成新的集合
scala> lst += 1
res58: lst.type = ListBuffer(1)

scala> lst += 2
res59: lst.type = ListBuffer(1, 2)

scala> lst.app
append        appendAll     apply         applyOrElse

scala> lst.append
append      appendAll

scala> lst.append(3,4)

scala> lst
res61: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)

// 將lst2中元素追加到lst中榜跌,注意:沒有生成新的集合
scala> lst ++= lst2
res62: lst.type = ListBuffer(1, 2, 3, 4, 4, 5, 6, 7)

scala> lst
res63: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 4, 5, 6, 7)

//兩個集合合并闪唆,生成了新的集合
scala> val lst3 = lst ++ lst2
lst3: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 4, 5, 6, 7, 4, 5, 6, 7)

2)、Set
不可變Set

scala> import scala.collection.immutable._
import scala.collection.immutable._

scala> val s1 = new HashSet[Int]()
s1: scala.collection.immutable.HashSet[Int] = Set()

//將元素1和s1合并生成一個新的set钓葫,原有set不變
scala> s1 + 1
res64: scala.collection.immutable.HashSet[Int] = Set(1)

//發(fā)現(xiàn)原來的set中還是空
scala> s1
res65: scala.collection.immutable.HashSet[Int] = Set()

scala> res64
res66: scala.collection.immutable.HashSet[Int] = Set(1)

//創(chuàng)建set的時候直接初始化
//重復的元素會去掉
scala> val set1 = Set(1,2,3,3)
set1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

//兩個set相加悄蕾,生成新的set,重復的元素會自動去掉础浮,且元素排序不是按加入的時候順序帆调,這樣這是set的特性
scala> val set2 = set1 ++ Set(3,4,5)
set2: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

可變set

scala> import scala.collection.mutable._
import scala.collection.mutable._

scala> val set1 = Set(1,2,3,3)
set1: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

//兩種方式添加元素,不會生成新的set
scala> set1.add(4)
res69: Boolean = true

scala> set1 += 5
res70: set1.type = Set(1, 5, 2, 3, 4)

scala> set1
res71: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 3, 4)

//刪除元素的兩種方式
scala> set1 -= 5
res72: set1.type = Set(1, 2, 3, 4)

scala> set1.remove(4)
res73: Boolean = true

scala> set1
res74: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

3)豆同、map
這里只演示可變map了番刊,都是跟上面一樣,操作跟java集合操作類似(需要導入可變集合的包影锈,上面已經(jīng)導入過)

//創(chuàng)建可變map
scala> val map = new HashMap[String,Int]
map: scala.collection.mutable.HashMap[String,Int] = Map()

//兩種方式添加元素芹务,不會生成新的集合
scala> map("zs") = 88

scala> map("ls") = 87

scala> map
res81: scala.collection.mutable.HashMap[String,Int] = Map(zs -> 88, ls -> 87)

scala> map.put("ww",99)
res82: Option[Int] = None

scala> map
res83: scala.collection.mutable.HashMap[String,Int] = Map(ww -> 99, zs -> 88, ls -> 87)

//兩種方式移除元素,不會生成新的集合

scala> map -= "ww"
res84: map.type = Map(zs -> 88, ls -> 87)

scala> map.remove("zs")
res85: Option[Int] = Some(88)

scala> map
res86: scala.collection.mutable.HashMap[String,Int] = Map(ls -> 87)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末精居,一起剝皮案震驚了整個濱河市锄禽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靴姿,老刑警劉巖沃但,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佛吓,居然都是意外死亡宵晚,警方通過查閱死者的電腦和手機垂攘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淤刃,“玉大人晒他,你說我怎么就攤上這事∫菁郑” “怎么了陨仅?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铝侵。 經(jīng)常有香客問我灼伤,道長,這世上最難降的妖魔是什么咪鲜? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任狐赡,我火速辦了婚禮,結(jié)果婚禮上疟丙,老公的妹妹穿的比我還像新娘颖侄。我一直安慰自己,他們只是感情好享郊,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布览祖。 她就那樣靜靜地躺著,像睡著了一般拂蝎。 火紅的嫁衣襯著肌膚如雪穴墅。 梳的紋絲不亂的頭發(fā)上惶室,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天温自,我揣著相機與錄音,去河邊找鬼皇钞。 笑死悼泌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的夹界。 我是一名探鬼主播馆里,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼可柿!你這毒婦竟也來了鸠踪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤复斥,失蹤者是張志新(化名)和其女友劉穎营密,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體目锭,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡评汰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年纷捞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被去。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡主儡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惨缆,到底是詐尸還是另有隱情糜值,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布坯墨,位于F島的核電站臀玄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畅蹂。R本人自食惡果不足惜健无,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望液斜。 院中可真熱鬧累贤,春花似錦、人聲如沸少漆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽示损。三九已至渗磅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間检访,已是汗流浹背始鱼。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脆贵,地道東北人医清。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像卖氨,于是被迫代替她去往敵國和親会烙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 嗯筒捺, 晚上在學校的5樓走廊上坐了一小會兒~ 隨手拍了幾張柏腻。 俯拍的時候記得畫面要正,形成構(gòu)成感噢系吭。 定焦之后燈光的...
    不單單閱讀 211評論 6 3
  • 文/飲盡風雪 -今日宜回想大學日子里走過的城市和路- 01 原來你一天吃一頓就可以了啊 老樣子村斟,凌晨四點閉眼的時候...
    飲盡風雪丶閱讀 264評論 5 4
  • 《小店》 街角十字街口輔路邊一隅,有一家簡陋的快餐店孩灯,江浙風格闺金,賣小籠包子為主的。 人做一件錯事想要糾正峰档,道歉彌補...
    隨心而去lsl閱讀 398評論 0 0
  • 上周六讥巡,終于騰出一個下午的時間注冊了一個區(qū)塊鏈的賬戶掀亩。買了一筆EOS,買了一筆ICST,回頭看欢顷,真是驚心自己的行動...
    顧艷梅dana閱讀 349評論 0 1