Goal
List内のMapから値を抽出し、Listにする。
List内の値を文字列へ変換する。
List内の値を文字列へ変換する。
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Wait a minute
ElixirのTipsです。内容は薄い。
Index
- List内のMapから値を抽出し、Listに変換
- List内の値を文字列へ変換
- おまけ
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でやればよくね?って思ったんだが・・・
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)の検索値に使いたかった。
私のやりたかったことが、SQLの副問合せ(in)の検索値に使いたかった。
例えば、こんなクエリがあるとする。
select * from users where id in (1, 2, 3)
このinの括弧の中に当たる値として利用したかった。
端折ってますけど、こんな感じになるはず。
端折ってますけど、こんな感じになるはず。
iex> "in (#{string_ids})"
"in (1, 2, 3)"
Speaking to oneself
俺の英語力では、タイトルや目次の部分を英語にできなかったよorz