Enum、Stream

Enum

  其常見用法見:https://cloud.tencent.com/developer/section/1116852

  在sort時,如果要獲得穩定的排序結果,要使用<= 而不是 <。

?

Stream

  Stream是延遲處理的,而Enum是貪婪的,則意味著傳給它一個收集,它會默默計算那個收集的所有內容。如:

[ 1, 2, 3, 4, 5]
|> Enum.map(&(&1 * &1))
|> Enum.with_index
|> Enum.map( fn {value, index} -> value - index end )
|> IO.inspect        #=> [ 1, 3 ,7, 13, 21 ]#第一個map函數接受原始列表并生成一個新列表,其元素值是原來的平方。...如此下去最終生成了四個列表s = Stream.map [ 1, 3, 5, 7 ], &(&1 + 1)     #s不是一個列表
Enum.to_list s        #這樣使用 => [ 2, 4, 6 ,8 ]#我們通常這樣寫
[ 1, 2, 3, 4 ]
|> Stream.map(&(&1 * &1))
|> Stream.map(&(&1 + 1))
|> Stream.filter( fn x -> rem(x, 2) == 1 end )            #rem求余
|> Enum.to_list        #轉化為我們可見的    

  使用Stream沒有中間結果,但是運行速度慢了兩倍。適用于數據抵達的慢,但一直持續。使用Enum要等到所有數據到達后才能開始處理。使用流,只有有數據抵達就可以進行處理。

?

自定義流

  Stream.cycle。它接受一個枚舉類型參數,并返回一個包含該枚舉類型參數元素的無限流。當到達結尾時會從頭開始

Stream.cycle(~w{ green white })
|> Enum.take(5)        #green white green white green

  Stream.repeatedly。接受一個函數,在需要更新時調用該函數

  Stream.iterate。Stream.iterate( start_value, next_fun )生成一個無限流,第一個值是start_value,下一個值是調用next_fun函數以第一個值為參數生成的。

Stream.iterate(0, &(&1 + 1)) |> Enum.take(5)        #[ 0, 1, 2, 3, 4]

  Stream.unfold。使用前兩個參數計算下一個值

Stream.unfold({0 ,1}, fn (f1, f2) -> {f1, {f2, f1 + f2}} end )
|> Enum.take(8)#[ 0, 1 ,1, 2, 3, 5, 8, 13 ]

?  Stream.resource。現在需要在流開始的時候才創建/讀取數據,而在流結束的時候需要關閉數據。Stream.resource第一個參數接受一個函數,它會返回值。第二個參數也是接受一個函數,函數接受第一個函數的返回值。第三個參數函數關閉相關資源。

Stream.resource(fn -> File.open("sample") end, fn file -> case IO.read(file, :line) doline when is_binary(line) -> { [line], file }_ -> { :halt, file }endend,fn file -> File.close!(file) end )

?

推導式

for x <- [1, 2, 3, 4, 5], do: x * xfor x <- [1, 2, 3, 4, 5], x < 4, do: x * x

  如果有兩個生成器,則它們的操作是嵌套的。

for x <- [1, 2], y <- [5, 6], do: {x, y}        #[ {1, 5}, {1, 6}, {2, 5}, {2, 6} ]

  后面的生成器可以使用前面的變量。

min_maxes = [{1, 4}, {2, 3}, {10, 15}]
for {min, max} <- min_maxes, n <- min..max, do: n#[1, 2, 3, 4, 2, 3 ,10, 11, 12, 13, 14, 15]

  例(使用了兩個生成器和過濾器)。

first8 = [1, 2, 3, 4, 5, 6, 7, 8]
for x <- first8, y <- first8, x >= y, rem(x*y, 10) == 0, do: {x, y}    #x >= y 防止出現{2, 5}、{5, 2}

?

  推導式處理二進制。推導式中的變量只在其內部有效。

for << ch <- "hello >>, do: ch        #返回的是列表[104, 101, 108, 108, 111]  iex顯示為 'hello'
for << ch <- "hello" >>, do: <<ch>>        #將編碼轉換為字符串  ["h", "e", ... ]

  推導式的返回值可以被into 改變。

for x <- ~w{ cat dog }, into: Map.new, do: { x, String.upcase(x) }        # %{"cat" => "CAT", "dog" => "DOG" }

?

轉載于:https://www.cnblogs.com/lr1402585172/p/11498748.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384204.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux網絡編程之posix 線程(三):posix 匿名信號量與互斥鎖 示例生產者--消費者問題

http://blog.csdn.net/jnu_simba/article/details/9123603 一、posix 信號量 信號量的概念參見這里。前面也講過system v 信號量&#xff0c;現在來說說posix 信號量。 system v 信號量只能用于進程間同步&#xff0c;而posix 信號量除了可以進程間同步&#xff0c;還可以線程間…

洛谷P1080-國王游戲-貪心+高精度

P1080-國王游戲 啊啊啊&#xff0c;剛才已經寫了一次了&#xff0c;但是Edge瀏覽器不知道為什么卡住了&#xff0c;難受。 好吧&#xff0c;其實是一道可做題&#xff0c;分析得到的貪心策略就是就是將a * b小的放在前面&#xff08;其他的懶得說了&#xff09;&#xff0c;主要…

字符串與二進制

單引號字符串會被表示成整數值列表。 &#xff1f;c返回字符 c 的整數編碼。下面這個例子用于解析字符列表表示法&#xff0c;該表示法用于表示一個任意的有符號的十進制數據。 defmodule Parse dodef number([ ?- | tail ]) do_number_digits(tail, 0) * -1enddef number([ ?…

P1092蟲食算-深度優先搜索+玄學剪枝

P1092蟲食算 這道題的思想并不復雜&#xff0c;可是難點在于各種玄學剪枝。在仔細研究了題解大佬的剪枝原理后終于氵了過去。 先上代碼&#xff1a; #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int MAXN100; int n…

多進程

使用spawn創建一個新進程&#xff0c;其第一個參數是模塊名、第二個參數是函數名、第三個參數是參數列表。spawn會返回一個進程標識符&#xff0c;通常叫做PID。 defmodule Spawn1 dodef greet doreceive do{sender, msg} ->send sender, { :ok, "Hello #{msg}" }…

Linux socket編程(二) 服務器與客戶端的通信

http://www.cnblogs.com/-Lei/archive/2012/09/04/2670964.html上一篇寫了對套接字操作的封裝&#xff0c;這一節使用已封裝好的Socket類實現服務器與客戶端的通信&#xff08;Socket的定義見上篇Socket.h) 服務器端&#xff1a; ServerSocket.h #ifndef SERVERSOCKET_H #defin…

OTP服務器

defmodule Sequence.Server douse GenServerdef handle_call( :next_number, _from, current_number) do{ :reply, current_number, current_number 1}  #reply告訴OTP將第二個元素返回給客戶端end end use的效果將OTP GenServer的行為添加到當前模塊。這樣它就可以處理所有…

洛谷P1040-加分二叉樹-dp+二叉樹

P1040-加分二叉樹 這道題放在深度優先搜索的訓練題中&#xff0c;可是我實在沒有看出來應該怎么搜索。看了題解以后才看出來是一個很簡單的dp(我果然還是太菜了) 看出dp并且算出來最大的分數不是很復雜&#xff0c;關鍵是輸出給定中序遍歷序列的二叉樹的先序遍歷&#xff0c;要…

UNIX網絡編程:I/O復用技術(select、poll、epoll)

http://blog.csdn.net/dandelion_gong/article/details/51673085 Unix下可用的I/O模型一共有五種&#xff1a;阻塞I/O 、非阻塞I/O 、I/O復用 、信號驅動I/O 、異步I/O。此處我們主要介紹第三種I/O符復用。 I/O復用的功能&#xff1a;如果一個或多個I/O條件滿足&#xff08;輸…

解決iex -S mix報錯

執行iex -S mix命令的時候會遇到如下錯誤&#xff1a; 執行 mix deps.get 然后就可以運行 iex -S mix了 其中&#xff0c;有可能會出現 按照其網站下載相應文件&#xff0c;復制到項目根目錄下&#xff0c;然后執行命令&#xff08;mix local.rebar rebar ./rebar&#xff09;即…

貪心算法——選擇不相交區間問題

題目描述&#xff1a;設有n個活動的集合&#xff0c;其中每個活動都要求使用同一個資源&#xff0c;而在同一時間內只有一個活動能夠使用這一資源&#xff0c;每個活動i都有一個要求使用該資源的起始時間si和一個結束時間fi(si<fi)&#xff0c;如果選擇了活動i&#xff0c;則…

Anker—工作學習筆記

http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html 1、基本知識 epoll是在2.6內核中提出的&#xff0c;是之前的select和poll的增強版本。相對于select和poll來說&#xff0c;epoll更加靈活&#xff0c;沒有描述符限制。epoll使用一個文件描述符管理多個描述符&am…

Supervisor監控

可參考&#xff1a;https://www.cnblogs.com/wang_yb/archive/2016/06/08/5564459.html &#xff1a;https://segmentfault.com/a/1190000007379204 轉載于:https://www.cnblogs.com/lr1402585172/p/11551488.html

深度搜索剪枝——數的劃分

【題目描述】將整數n分成k份&#xff0c;且每份不能為空&#xff0c;問有多少種分法&#xff1f; 【輸入格式】兩個整數n,m(6<n<200,2<m<6) 【輸出格式】輸出不同的分法數 【樣例輸入】7 3 【樣例輸出】4 對于這種搜索題&#xff0c;關鍵就在于剪枝&#xff1a;確定…

Linux網絡編程——tcp并發服務器(I/O復用之select

http://blog.csdn.net/lianghe_work/article/details/46519633 與多線程、多進程相比&#xff0c;I/O復用最大的優勢是系統開銷小&#xff0c;系統不需要建立新的進程或者線程&#xff0c;也不必維護這些線程和進程。 代碼示例&#xff1a; [csharp] view plaincopy #include &…

ets

:ets.new(table_name, pattern) 第一個參數是表名&#xff0c;第二個參數是表的設置選項。 :set  一個key&#xff0c;一個數據&#xff0c;無序 :ordered_set  一個key&#xff0c;一個數據&#xff0c;有序&#xff1b; 1 1.0 :bag  一個key&#xff0c;多個數據&…

貪心算法-區間選點問題-種樹

【題目描述】一條街道的一邊有幾座房子。因為環保原因居民想要在路邊種些樹&#xff0c;路邊的地區被分割成n塊&#xff0c;并被編號為1~n。每塊大小為一個單位尺寸且最多可總一棵樹。每個居民想在門前種些樹并制定了三個數b,e,t&#xff0c;這三個數代表居民想在b和e之間最少種…

ets注意事項

當表類型為 :set 時&#xff0c;使用 :ets.first 和 :ets.last 會獲取到同一個 key。將表類型換為 :oedered_set 就可以避免這種情況 轉載于:https://www.cnblogs.com/lr1402585172/p/11599219.html

CodeForces - 1141CPolycarp Restores Permutation搜索+剪枝

Polycarp Restores Permutation 【題意分析】題意大概是給定一個串&#xff0c;包含從1到n所有的數字。但是給定的是相鄰數字的差&#xff0c;需要復原這個串。 大概分析以后發現給定的是一個差分數組&#xff0c;所以只需要枚舉第一個元素就可以確定所有元素的值。 問題是如何…

CodeForces - 1141ESuperhero Battle簡單模擬

Superhero Battle 這道題卡了我一個多小時&#xff0c;最后也沒有做出來&#xff0c;成功稱為吊車尾。。。 思路什么的都沒有問題&#xff0c;主要是&#xff0c;爆long long了&#xff0c;這個太可怕了&#xff0c;就因為一個中間變量忘記開longlong導致一直一直wa&#xff0c…