日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

scala进阶笔记:函数组合器(combinator)

發布時間:2025/3/15 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scala进阶笔记:函数组合器(combinator) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

collection基礎參見之前的博文scala快速學習(二)。

本文主要是組合器(combinator),因為在實際中發現很有用。主要參考:http://www.importnew.com/3673.html

?

List(1,2,3) map squared會在列表的每個元素上分別應用squared函數,并且返回一個新的列表,可能是List(1,4,9)。我們把類似于map這樣的操作稱為組合器。

?

特點:組合器的參數都是一個函數,這個函數的輸入輸出都是列表元素。最常見的方式是匿名函數用=>定義,左邊輸入右邊輸出。

Ps:區分,<- 主要是迭代里用,->主要是map里用,=>主要是匿名函數用。

?

  • map:在List中的每個元素上計算一個函數,并且返回一個包含相同數目元素的List。?
scala> numbers.map((i: Int) => i * 2) res0: List[Int] = List(2, 4, 6, 8)scala> def timesTwo(i: Int): Int = i * 2 timesTwo: (i: Int)Intscala> numbers.map(timesTwo _) res0: List[Int] = List(2, 4, 6, 8)
  • foreach:foreach和map使用方法相似,只不過它沒有返回值,foreach是為了對原List操作。?
  • filter:移除任何使得傳入的函數返回false的元素。所以函數參數是斷言函數(返回Boolean類型的函數一般都稱為斷言函數)。
  • zip:把兩個List的元素合成一個由元素對組成的List里。
scala> List(1, 2, 3).zip(List("a", "b", "c")) res0: List[(Int, String)] = List((1,a), (2,b), (3,c))
  • partition:根據斷言函數的返回值對列表進行拆分。
scala> val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) scala> numbers.partition(_ %2 == 0) res0: (List[Int], List[Int]) = (List(2, 4, 6, 8, 10),List(1, 3, 5, 7, 9))
  • find:返回集合里第一個匹配斷言函數的元素。
  • drop:丟棄前i個元素。 ?dropWhile:移除前幾個匹配斷言函數的元素。
  • fold,foldLeft,foldRight:累計操作。 List中的fold方法需要輸入兩個參數:初始值以及一個函數。輸入的函數也需要輸入兩個參數:累加值和當前item的索引。fold不定次序,foldLeft從左向右。
  • flatten:?把嵌套的結構展開。
scala> List(List(1, 2), List(3, 4)).flatten res0: List[Int] = List(1, 2, 3, 4)
  • flatMap: 一個常用的combinator,它結合了map和flatten的功能。flatMap接收一個可以處理嵌套列表的函數,然后把返回結果連接起來。
scala> val nestedNumbers = List(List(1, 2), List(3, 4)) nestedNumbers: List[List[Int]] = List(List(1, 2), List(3, 4))scala> nestedNumbers.flatMap(x => x.map(_ * 2)) res0: List[Int] = List(2, 4, 6, 8)

?

?上面所展示的所有函數組合器都能對Map進行處理,看作是由鍵值對組成的列表,這樣你寫的函數就可以對Map里的key和value進行處理。可以用一個模式匹配來優雅地獲取key和value。

scala> extensions.filter({case (name, extension) => extension < 200}) res0: scala.collection.immutable.Map[String,Int] = Map((steve,100), (bob,101))

?

轉載于:https://www.cnblogs.com/aezero/p/4565591.html

總結

以上是生活随笔為你收集整理的scala进阶笔记:函数组合器(combinator)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。