scala—集合操作
本文介紹了scala常用的集合主要有set(無序不重複)、sortedset(有序不重複)、list(可重複)
最後詳細介紹了list的一些通用函式主要有
filter、teke、map、reduce、flatten、flatmap、zip、min、count、max、sum等常用的函式
無序不重複set集合操作
scala> val s=set(1,2,3,4,5)
s: scala.collection.immutable.set[int] = set(5, 1, 2, 3, 4)
去掉某個元素
scala> s -5
res0: scala.collection.immutable.set[int] = set(1, 2, 3, 4)
一次去掉多個元素操作
scala> s -(1,2,3)
res1: scala.collection.immutable.set[int] = set(5, 4)
大家會發現剛才去掉的5怎麼又會來了,是因為immutable是不可變集合
直接去掉乙個集合
scala> s - list(4,5)
:13: error: type mismatch;
found : list[int]
required: int
s - list(4,5)
^如果去掉乙個集合需要是用兩個減號
scala> s -- list(4,5)
res3: scala.collection.immutable.set[int] = set(1, 2, 3)
scala> s +6
res4: scala.collection.immutable.set[int] = set(5, 1, 6, 2, 3, 4)
scala> s +1
res5: scala.collection.immutable.set[int] = set(5, 1, 2, 3, 4)
scala> s + (34,56)
res6: scala.collection.immutable.set[int] = set(5, 56, 1, 2, 34, 3, 4)
有序不重複set集合操作 sortedset
scala> sortedset(1,2,3,4,500,4,6,89,56,5,3,1)
:12: error: not found: value sortedset
sortedset(1,2,3,4,500,4,6,89,56,5,3,1)
^需要引入immutable.sortedset
scala> scala.collection.immutable.sortedset(21,45,1,2,5)
res10: scala.collection.immutable.sortedset[int] = treeset(1, 2, 5, 21, 45)
可變不重複集合mutable
scala> import scala.collection.mutable.set
import scala.collection.mutable.set
scala> val set=set(1,2,2,3)
set: scala.collection.mutable.set[int] = set(1, 2, 3)
scala> set + 3
res11: scala.collection.mutable.set[int] = set(1, 2, 3)
scala> set + 4
res12: scala.collection.mutable.set[int] = set(1, 2, 3, 4)
scala> set
res13: scala.collection.mutable.set[int] = set(1, 2, 3)
scala> set += 4
res14: set.type = set(1, 2, 3, 4)
scala> set
res15: scala.collection.mutable.set[int] = set(1, 2, 3, 4)
可以加多個
scala> set +5 +6 +7
res16: scala.collection.mutable.set[int] = set(1, 5, 2, 6, 3, 7, 4)
scala> set
res17: scala.collection.mutable.set[int] = set(1, 2, 3, 4)
scala> set +(10,22,34)
res18: scala.collection.mutable.set[int] = set(1, 34, 2, 3, 10, 4, 22)
scala> set + list(55,66,77)
:14: error: type mismatch;
found : list[int]
required: int
set + list(55,66,77)
^scala> set ++ list(55,66,77)
res20: scala.collection.mutable.set[int] = set(66, 1, 2, 3, 4, 55, 77)
scala> set
res21: scala.collection.mutable.set[int] = set(1, 2, 3, 4)
集合list的通用操作
scala> val list=list(1,1,2,3,4,5,6,7,8,9)
list: list[int] = list(1, 1, 2, 3, 4, 5, 6, 7, 8, 9)
過濾大於5的元素
scala> list.filter(_>5)
res22: list[int] = list(6, 7, 8, 9)
將集合中的元素乘以3
scala> list.map(_ * 3)
res23: list[int] = list(3, 3, 6, 9, 12, 15, 18, 21, 24, 27)
先過濾大於5的資料在讓每個元素乘以2,最後列印出來
scala> list.filter(_>5).map(_ * 2).foreach(println(_))
1214
1618
如果列印的資料只有乙個元素的話可以這樣寫
scala> list.filter(_>5).map(_ * 2).foreach(println)
1214
1618
取出集合中前三個元素
scala> list.take(3)
res29: list[int] = list(1, 1, 2)
reduce(_+_)操作每兩個元素操作一次,操作後的元素在與第三個元素進行操作,迴圈迭代
scala> list.filter(_>5).map(_ * 2).reduce(_+_)
res30: int = 60
求最大值
scala> list.max
res31: int = 9
求最小值
scala> list.min
res32: int = 1
統計個數(注意要跟filter)
scala> list.count(_>5)
res33: int = 4
scala> list.sum
res34: int = 46
zip操作將兩個list集合配對
scala> val list1=list(1,2,3,4,5)
list1: list[int] = list(1, 2, 3, 4, 5)
scala> val list2=list("a","b","c","d","e","f")
list2: list[string] = list(a, b, c, d, e, f)
scala> list1 zip list2
res35: list[(int, string)] = list((1,a), (2,b), (3,c), (4,d), (5,e))
scala>
flatten操作將list集合壓扁
scala> val list3=list(list(1,2),list(3,4),list(5,6))
list3: list[list[int]] = list(list(1, 2), list(3, 4), list(5, 6))
scala> list3.flatten
res38: list[int] = list(1, 2, 3, 4, 5, 6)
flatten一般是和map組合使用
scala> list3
res40: list[list[int]] = list(list(1, 2), list(3, 4), list(5, 6))
scala> list3.flatmap(_.map(3*_))
res41: list[int] = list(3, 6, 9, 12, 15, 18)
看一下只用map不用flatten的效果
scala> list3.map(_.map(_*3))
res42: list[list[int]] = list(list(3, 6), list(9, 12), list(15, 18))
Spark基礎 Scala集合操作
1 scala的集合操作 package com.xlucas import scala.collection.mutable created by xlucas on 2017 8 17 0017.1 預設情況下map構造的是不可變的集合,裡面的內容不可修改,一旦修改就變成新的map,原有的map...
scala基礎語法
一 變數定義 1 val 定義的變數值不可以修改 2 var 定義的變數值可以修改 二 一些變數型別 1 unit 表示不返回任何結果方法的結果型別,相當於void 2 null null 空引用 3 nothing 任何其他類的子型別 4 any 所有其他類的父類 5 anyref 所有引用類的基...
Scala基礎學習 scala集合 005
定長陣列 println test val a new array string 5 a.length a 0 hello 賦值 a 1 取值 b 1 flink 可以修改值,並沒有修改指標 val c array 1,2,3,4,5,6 c.mkstring 轉換為字串 c.mkstring c....