LoginSignup
2

posted at

updated at

Organization

Enum.zip_reduce を楽しむ (Elixir)

客の目線ではなく自分の目線でモノをつくれ。

Advent Calendar 2022 31日目1の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私のAdvent Calendar 2022 一覧


はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

Enum.zip_reduce/4Enum.zip_reduce/3をご紹介します。
楽しんでみます。
1.12から追加された関数です。

elixirjp.slack.com#beginnersチャンネルで以下の問題が検討されていました。
私も検討に参加しました。
Enumモジュールを眺めていて、Enum.zip_reduce/4Enum.zip_reduce/3の存在を知りました。
さっそく楽しんでみます。

問題

  • 2つのリストがあります
  • それぞれのリストの長さは同じです
  • 一方のリストのTrutyなインデックスに該当する値をもう一方のリストから取り出す

例です。

as = [true, false, true, 1, nil, true]
bs = ["sss", "bbb", "xxx", "hoge", "fuga", "foo"]

=> Expected: ["sss", "xxx", "hoge", "foo"]

Enum.zip_reduce/4 を使った解

Enum.zip_reduce(as, bs, [], fn a, b, acc ->
  if a, do: [b | acc], else: acc
end)
|> Enum.reverse()

ちなみに、Enum.zip_reduce/3もあります。

Enum.zip_reduce([as, bs], [], fn [a, b], acc ->
  if a, do: [b | acc], else: acc
end)
|> Enum.reverse()

Enum.filter/2Enum.map/2を使う解

Enum.zip(as, bs)
|> Enum.filter(fn {a, _b} -> a end)
|> Enum.map(&elem(&1, 1))

zip_reduce/4 exists for convenience purposes.

と、ドキュメントに書いてあります。
こういうzip |> filter |> mapをしたいことってよくありそうですよね。


Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Enjoy Elixir:bangbang::bangbang::bangbang:
$\huge{Enjoy\ Elixir🚀}$

Enum.zip_reduce/4Enum.zip_reduce/3を楽しんでみました。
zip |> filter |> mapしたいときにおもいだしてください。


2022年に流行る技術予想 ーー それは、ElixirPhoenix LiveViewです:rocket::rocket::rocket:

Elixirの誕生日は、2012年5月24日です。
そのため、今年の2022年5月24日は10周年を迎えます。

iex> Date.diff(~D[2022-05-24], ~D[2022-01-31])
113

付録

以下、付録です。

そうそう!
2月24日発売予定のWEB+DB PRESSで、ElixirPhoenixの特集がでますよ〜


Elixir

最後の最後に、Elixirについて紹介します。

  • |>でスイスイ、プログラミングしていくことができる素敵なプログラミング言語です
  • さっそくプログラムの例を示します
  • Qiita APIを使わせていただいて、Elixirタグがついた最新の記事を20件取得しています
  • ここでは雰囲気をつかんでいただければ大丈夫です
Mix.install [{:req, "~> 0.2.1"}]

"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))

Webアプリケーションを楽しむなら

IoTを楽しむなら

AIを楽しむなら

もっとElixirのことを知りたい方へオススメの書籍 :books:

コミュニティ

  • elixir.jp Slack workspaceに参加してみてください
    • マヂ、やさしい人ばっかりのコミュニティ
    • あなたの困ったをきっと解決してくれるでしょう
  • NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します :tada:
  • たくさんのコミュニティがあります
    FCOvBkAUYAE6mL8.jpeg
    (EDI/fukuoka.ex/kokura.exLiveView JP@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)

Elixirコミュニティに初めて接する方は下記がオススメです

Elixirコミュニティ の歩き方 -国内オンライン編-

https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
image.png
(piyopiyo.exエリジョ の nakoさん(@nako_sleep_9h) 作、素敵な資料:clap::clap_tone1::clap_tone2::clap_tone3::clap_tone4::clap_tone5:)


I organize autoracex.
And I belong to NervesJP, fukuoka.ex, EDI, tokyo.ex.
I hope someday you'll join us.

We Are The Alchemists, my friends!

  1. @kaizen_nagoya さんの「「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 1日目 Most Breakthrough Generator」から着想を得て、模倣いたしました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2