Enjoy Elixir #007 Flow
12085 단어 Elixir
소개
KFIE이라는 킨키 대학 산업 이공 학부의 정보계 커뮤니티가 있습니다.
모쿠지
Elixir
|> 001 mix new, iex -S mix, mix format
|> 002형
|> 003 패턴 매칭
|> 004 Modules and functions
|> 005 Pipe operator and Enum module
|> 006 HTTP GET!
|> 007 Flow
|> 008 AtCoder를 풀어보기
준비
$ mix new hello_flow
$ cd hello_flow
종속성 해소
$ mix new hello_flow
$ cd hello_flow
종속성 해소
Flow allows developers to express computations on collections, similar to the Enum and Stream modules, although computations will be executed in parallel using multiple GenStages.
mix.exs
defp deps do
[
{:flow, "~> 1.0"}
]
end
$ mix deps.get
플로우를 잡지 않고 단어 수를 세어보십시오.
lib/word_count.exdefmodule WordCount do
@path "testfile.txt"
def run do
File.stream!(@path)
|> Enum.flat_map(&String.split(&1, " "))
|> Enum.map(&String.trim/1)
|> Enum.reduce(%{}, fn word, acc ->
Map.update(acc, word, 1, &(&1 + 1))
end)
end
end
defmodule WordCount do
@path "testfile.txt"
def run do
File.stream!(@path)
|> Enum.flat_map(&String.split(&1, " "))
|> Enum.map(&String.trim/1)
|> Enum.reduce(%{}, fn word, acc ->
Map.update(acc, word, 1, &(&1 + 1))
end)
end
end
testfile.txt
는 Flow 로 만들었습니다Faker 을 이용했습니다
실행
$ curl -o testfile.txt https://firebase.torifuku-kaiou.tokyo/testfile.txt
$ iex -S mix
iex> :timer.tc WordCount, :run, []
{21064536,
%{
"Russ" => 19354,
"whole" => 18160,
"prove" => 18346,
...
}}
Flow를 사용하여 단어 수를 계산
lib/word_count.exdefmodule WordCount do
@path "testfile.txt"
def run_with_flow do
File.stream!(@path)
|> Flow.from_enumerable()
|> Flow.partition()
|> Flow.flat_map(&String.split(&1, " "))
|> Flow.map(&String.trim/1)
|> Flow.reduce(fn -> %{} end, fn word, acc ->
Map.update(acc, word, 1, &(&1 + 1))
end)
|> Enum.into(%{})
end
end
실행
iex> recompile
iex> :timer.tc WordCount, :run_with_flow, []
{7952146,
%{
"Russ" => 19354,
"whole" => 18160,
"prove" => 18346,
...
}}
iex> 7952146 / 21064536
0.37751346623538257
defmodule WordCount do
@path "testfile.txt"
def run_with_flow do
File.stream!(@path)
|> Flow.from_enumerable()
|> Flow.partition()
|> Flow.flat_map(&String.split(&1, " "))
|> Flow.map(&String.trim/1)
|> Flow.reduce(fn -> %{} end, fn word, acc ->
Map.update(acc, word, 1, &(&1 + 1))
end)
|> Enum.into(%{})
end
end
iex> recompile
iex> :timer.tc WordCount, :run_with_flow, []
{7952146,
%{
"Russ" => 19354,
"whole" => 18160,
"prove" => 18346,
...
}}
iex> 7952146 / 21064536
0.37751346623538257
Wrapping Up
Reference
이 문제에 관하여(Enjoy Elixir #007 Flow), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/eb1aa2c8842adfc40637텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)