(この記事は、「fukuoka.ex x ザキ研 Advent Calendar 2017」の2日目です)
昨日は @hisaway さんの「Elixirのリストの仕様をまとめてみた」でしたね。
#はじめに
ザキ研メンバーとして「fukuoka.ex x ザキ研 Advent Calendar」に参加させていただくことになりました、ザキ研の@TakeshiKoguといいます。これからfukuoka.exのアドバイザーとキャストの方々とElixirを盛り上げていけるように精一杯頑張ります。どうぞよろしくお願いします。
今回は@piacereさんの記事を参考にさせていただき書いてみました。(https://qiita.com/piacere_ex/items/6714e1440e3f25fb46a1)
#数値の並び替えをしてみる
Enum.sort()を用いてデータの「並び替え」をします。
まずはじめに「iex」コマンドを起動しElixirのコードをインタラクティブに実行できる状態にします。
idx
Interactive Elixir (1.6.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
iex内で、Enum.sort()を用いたコードを打ってみると、
iex> Enum.sort([100, 270, 50, 130])
[50, 100, 130, 270]
このように簡単に数値を昇順化することができました。
またこのように書き換えることも可能です。
iex> [100, 270, 50, 130] |> Enum.sort
[50, 100, 130, 270]
0以下の処理や小数点以下の処理にも対応していることも確認できました。
iex> [-2.2, 1.6, 0.1, -4.5, 0, 0.1, 1.1] |> Enum.sort
[-4.5, -2.2, 0, 0.1, 0.1, 1.1, 1.6]
#データの数を数えてみる
Enum.count()を用いてデータの数を数えます。
iex> [100, 270, 50, 130] |> Enum.count
4
並び替えと同様にEnum.countを用いるだけで数えることができました。
#フィルタをかけてみる
Enum.filter()を用いてデータに「フィルタ」をかけます。
iex> [100, 270, 50, 130] |> Enum.filter(fn(n) -> n != 50 end)
[100, 270, 130]
「fn」は、関数 (function) を意味しており、「->」から「end」の間に処理する内容を記述することでデータの処理が行われます。
今回は50がデータの中にあるか確認し、50でない値が返されるようにフィルタをかけたことになりました。
```elixir`
iex> [-20, 160, 35, -100, -25, 40, 200, 10] |> Enum.filter(fn(n) -> n <= 0 || n == 40 end)
[-20, -100, -25, 40]
このように処理の条件を複数つけることも可能です。
# まとめ
今回行った処理を組み合わせることで、あるデータの中に0以下の値が幾つ含まれているか調べることも容易に可能となります。
```elixir`
iex> [-20, 160, 35, -100, -25, 40, 200, 10] |> Enum.sort |> Enum.filter(fn(n) -> n <= 0 end) |> Enum.count
3
このようにEnumを使うことでデータの様々な処理が簡単に行うことができました。パイプライン演算子を使うことで一度に全ての処理を行うことが可能となりました。
今回行った処理以外にもEnumを使ってのデータの処理は多く存在します。
ElixirでEnumを使うことでExcelでしている処理が想像以上に簡単にでき、私はこれからもっとElixirについて学び知識を向上させ、研究につなげていこうと思えました。
明日は @zumin さんの「Elixirで一千万行のJSONデータで遊んでみた」です。お楽しみに!