大資料學習 7Scala系列之集合操作函式

2021-09-27 04:24:20 字數 2885 閱讀 1637

4.6 集合的重要函式

4.6.1sum/max/min/count

在序列中查詢最大或最小值是乙個極常見的需求,如下:

val numbers = seq(11, 2, 5, 1, 6, 3, 9)

numbers.max //11

numbers.min //1

更高階的例子,其中包含乙個書的序列

case class book(title: string, pages: int)

val books = seq( book(「future of scala developers」, 85),

book(「parallel algorithms」, 240),

book(「object oriented programming」, 130),

book(「mobile development」, 495) )

//book(mobile development,495)

books.maxby(book => book.pages)

//book(future of scala developers,85)

books.minby(book => book.pages)

如上所示,minby & maxby 方法解決了複雜資料的問題。你只需選擇決定資料最大或最小的屬性。

4.6.2 過濾

過濾乙個數字 list,只獲取奇數的元素。

val numbers = seq(1,2,3,4,5,6,7,8,9,10) numbers.filter(n => n % 2 == 0)

val books = seq( book(「future of scala developers」, 85),

book(「parallel algorithms」, 240),

book(「object oriented programming」, 130),

book(「mobile development」, 495) )

books.filter(book => book.pages >= 120)

4.6.3 flatten

val abcd = seq(『a』, 『b』, 『c』, 『d』)

val efgj = seq(『e』, 『f』, 『g』, 『h』)

val ijkl = seq(『i』, 『j』, 『k』, 『l』)

val mnop = seq(『m』, 『n』, 『o』, 『p』)

val qrst = seq(『q』, 『r』, 『s』, 『t』)

val uvwx = seq(『u』, 『v』, 『w』, 『x』)

val yz = seq(『y』, 『z』)

val alphabet = seq(abcd, efgj, ijkl, mnop, qrst, uvwx, yz)

//// list(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t,

// u, v, w, x, y, z)

alphabet.flatten

當有乙個集合的集合,然後你想對這些集合的所有元素進行操作時,就會用到 flatten。

4.6.4集合之間的操作

差集、交集和並集

val num1 = seq(1, 2, 3, 4, 5, 6)

val num2 = seq(4, 5, 6, 7, 8, 9)

//list(1, 2, 3)

num1.diff(num2)

//list(4, 5, 6)

num1.intersect(num2)

//list(1, 2, 3, 4, 5, 6, 4, 5, 6, 7, 8, 9)

num1.union(num2)

上述示例中的 union 保留了重複的元素。如果我們不需要重複怎麼辦?這時可以使用 distinct 函式

//list(1, 2, 3, 4, 5, 6, 7, 8, 9)

num1.union(num2).distinct

下面是上述功能的圖示:

4.6.5 map(對映)列表元素

map 是 scala 集合最常用的乙個函式。它的功能十分強大:

val numbers = seq(1,2,3,4,5,6)

//list(2, 4, 6, 8, 10, 12)

numbers.map(n => n * 2)

val chars = seq(『a』, 『b』, 『c』, 『d』)

//list(a, b, c, d)

chars.map(ch => ch.toupper)

map 函式的邏輯是遍歷集合中的元素並對每個元素呼叫函式。

4.6.6 flatmap

flatmap 是由下列這兩個函式組成的:

map & flatten

例子:val abcd = seq(『a』, 『b』, 『c』, 『d』)

//list(a, a, b, b, c, c, d, d)

abcd.flatmap(ch => list(ch.toupper, ch))

4.6.7 對整個集合進行條件檢查

val numbers = seq(3, 7, 2, 9, 6, 5, 1, 4, 2)

//ture numbers.forall(n => n < 10)

scala> a.reduceleft(+)

res6: int = 6

scala> a.foldleft(100)(+)

res7: int = 106

scala> a.foldleft(200)(+)

res8: int = 206

大資料系列修煉 Scala課程82

核心內容 1 scala中的listbuffer高效的遍歷操作 實戰 1 scala中的listbuffer高效的遍歷操作操作 實戰 1 scala中的listbuffer可以高效的進行遍歷操作。例項程式 同乙個問題,三種實現方案對比。本程式的目的是將集合中的每個元素都加1 object app6 ...

大資料系列修煉 Scala課程56

大資料系列修煉 scala課程56 核心內容 1 scala中self types this 操作 實戰 1 每個類本身都有乙個this指標,通過this指標可以引用自身的例項 在自身型別當中,self不是關鍵字,是this的別名,具有更強的可讀性。2 在scala當中,可以在類中 特質中 obje...

大資料學習之Scala陣列和集合學習38

1 陣列定義 陣列定義1 var arr new array string 3 string 儲存的元素型別 3 儲存 3個元素 新增元素 arr 1 dawn 陣列定義2 val arr1 array int 1,2,3,4,5,6 改變內容 arr1 1 20 新增元素 arr1 18長度不可以...