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長度不可以...