スポンサーリンク

2015年8月6日

[ElixirTips]List、Map、Enumで値の抽出から文字列まで

とある錬金術師の万能薬(Elixir)

Goal

List内のMapから値を抽出し、Listにする。
List内の値を文字列へ変換する。

Dev-Environment

OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4

Wait a minute

ElixirのTipsです。内容は薄い。

Index

  1. List内のMapから値を抽出し、Listに変換
  2. List内の値を文字列へ変換
  3. おまけ

1. List内のMapから値を抽出し、Listに変換

PhoenixやEctoを触っていると、こんなリストをよく目にする機会が多いと思う。
iex> ids = [%{id: 1, name: "hoge"}, %{id: 2, name: "huge"}, %{id: 3, name: "foo"}]
[%{id: 1, name: "hoge"}, %{id: 2, name: "huge"}, %{id: 3, name: "foo"}]
この中から:idの項目だけ抽出したい場合があると思う。
(ってか、あった)
結構簡単にできる。
iex> id_list = for id <- ids do Map.get(id, :id) end
[1, 2, 3]
中身を見てみると・・・ちゃんと取得できてる。
iex> id_list
[1, 2, 3]
Description:
forに対してイコールするのは何かかっこ悪い気がするので、
Enum.eachでやればよくね?って思ったんだが・・・
戻り値が:okで取得できなかった。
(やり方が悪いのだろうか?上手い方法あったら教えて下さい)
iex> id_list = Enum.each(ids, fn(id) -> Map.get(id, :id) end)
:ok
iex> id_list
:ok

2. List内の値を文字列へ変換

List内の値をそのまま文字列に変換したいと思った。
(ってか、やる必要があった)
iex> id_list = [1, 2, 3]
[1, 2, 3]
こっちも簡単にできる。
iex> string_ids = Enum.join(id_list, ", ")
"1, 2, 3"
これだけ。

3. おまけ

そもそも何に使うんだ?って疑問符が浮かんでいる人がいると思う。
私のやりたかったことが、SQLの副問合せ(in)の検索値に使いたかった。
例えば、こんなクエリがあるとする。
select * from users where id in (1, 2, 3)
このinの括弧の中に当たる値として利用したかった。
端折ってますけど、こんな感じになるはず。
iex> "in (#{string_ids})"
"in (1, 2, 3)"

Speaking to oneself

俺の英語力では、タイトルや目次の部分を英語にできなかったよorz

Bibliography

人気の投稿