Enumで遊んでみたいと思います
今回は
Enum.with_index
Enum.filter
Enum.map
で遊びます
#Enum.with_index
[
"abc",
"def",
"ghi"
]
|> Enum.with_index()
結果:配列に対して0から順番にインデックスを付けてくれます
[{"abc", 0}, {"def", 1}, {"ghi", 2}]
#Enum.filter
[
{"abc", 0},
{"def", 1},
{"ghi", 2}
]
|> Enum.filter(&elem(&1, 1) in [0,2])
結果: 数字が0と2で絞り込みしたタプルを取得
[{"abc", 0}, {"ghi", 2}]
#elemの挙動を確認してみよう
elem({"abc", 0}, 0)
結果:タブルの0番目を取得
"abc"
elem({"abc", 0}, 1)
結果:タブルの1番目を取得
0
#Enum.map
[
{"abc", 0},
{"def", 1},
{"ghi", 2}
]
|> Enum.map(&elem(&1, 0))
結果:タプルの0番目のリストを作成
["abc", "def", "ghi"]
#組み合わせてみよう
[
"abc",
"def",
"ghi"
]
|> Enum.with_index()
|> Enum.filter(&elem(&1, 1) in [0,2])
|> Enum.map(&elem(&1, 0))
結果:0番目と2番目のリストを作成
["abc", "ghi"]
#関数化してみよう
defmodule Hoge do
def hoge(data, indexes) do
data
|> Enum.with_index()
|> Enum.filter(&elem(&1, 1) in indexes)
|> Enum.map(&elem(&1, 0))
end
end
[
"abc",
"def",
"ghi"
]
|> Hoge.hoge([0,2])
結果:0番目と2番目のリストを作成
["abc", "ghi"]