<font id="tbtdb"></font>

        <sub id="tbtdb"><delect id="tbtdb"></delect></sub>

          <progress id="tbtdb"></progress>
          <address id="tbtdb"></address><thead id="tbtdb"></thead>
          <font id="tbtdb"></font>

          <meter id="tbtdb"><cite id="tbtdb"><dl id="tbtdb"></dl></cite></meter>

          好程序員-千鋒教育旗下高端IT職業教育品牌

          400-811-9990
          我的賬戶
          好程序員

          專注高端IT職業培訓

          親愛的猿猿,歡迎!

          已有賬號,請

          如尚未注冊?

          [BigData] 好程序員大數據學習路線分享Scala系列之集合操作函數

          [復制鏈接]
          131 0
          葉子老師 發表于 2019-9-10 15:10:44 | 只看該作者 |只看大圖 |閱讀模式 打印 上一主題 下一主題
          好程序員大數據培訓學習路線繼續為大家分享Scala系列之集合操作函數
          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 對整個集合進行條件檢查
          1. val numbers = Seq(3, 7, 2, 9, 6, 5, 1, 4, 2)   
          2. //ture numbers.forall(n => n < 10)   
          3. //false numbers.forall(n => n > 5)
          forall 函數就是為處理這類需求而創建的。
          4.6.8 對集合進行分組
          比如把某個集合拆分成偶數集和奇數集,partition 函數可以幫我們做到這一點:
          val numbers = Seq(3, 7, 2, 9, 6, 5, 1, 4, 2)   
          //(List(2, 6, 4, 2), List(3, 7, 9, 5, 1))   
          numbers.partition(n => n % 2 == 0)  
          4.6.9 Fold
          另一個流行的操作是 fold,通常可以考慮 foldLeft 和 foldRight。他們是從不同的方面做同樣的工作:
          val numbers = Seq(1, 2, 3, 4, 5)   
          //15 numbers.foldLeft(0)((res, n) => res + n)  
          val words = Seq("apple", "dog", "table")   
          //13 words.foldLeft(0)((resultLength, word) => resultLength + word.length)  
          foldLeft, reduceRight, and foldRight
          方法foldLeft與reduceLeft工作方法很象,但是它讓你指定一個值作為第一個元素。
          scala> val a = Array(1, 2, 3)
          a: Array[Int] = Array(1, 2, 3)

          scala> a.reduceLeft(_+_)
          res6: Int = 6

          scala> a.foldLeft(100)(_+_)
          res7: Int = 106

          scala> a.foldLeft(200)(_+_)
          res8: Int = 206
          好程序員大數據培訓官網:http://www.xn122.com/

          精彩內容,一鍵分享給更多人!
          收藏
          收藏0
          轉播
          轉播
          分享
          淘帖0
          支持
          支持0
          反對
          反對0
          回復

          使用道具 舉報

          您需要登錄后才可以回帖

          本版積分規則

          關注我們
          好程序員
          千鋒好程序員

          北京校區(總部):北京市海淀區寶盛北里西區28號中關村智誠科創大廈

          深圳西部硅谷校區:深圳市寶安區寶安大道5010號深圳西部硅谷B座A區605-619

          杭州龍馳智慧谷校區:浙江省杭州市下沙經濟技術開發區元成路199號龍馳智慧谷B座7層

          鄭州校區:鄭州市二七區航海中路60號海為科技園C區10層、12層

          Copyright 2007-2019 北京千鋒互聯科技有限公司 .All Right

          京ICP備12003911號-5 京公安網11010802011455號

          請您保持通訊暢通1對1咨詢馬上開啟

          电影韩国三级2019在线观看