I could not find the exact function in the library, so I tried to implement it. Hope this can help someone.
defmodule Sample1 do # combining Enum functions def find_indexes(collection, function) do Enum.filter_map(Enum.with_index(collection), fn({x, _y}) -> function.(x) end, elem(&1, 1)) end end defmodule Sample2 do # implementing as similar way as Enum.find_index def find_indexes(collection, function) do do_find_indexes(collection, function, 0, []) end def do_find_indexes([], _function, _counter, acc) do Enum.reverse(acc) end def do_find_indexes([h|t], function, counter, acc) do if function.(h) do do_find_indexes(t, function, counter + 1, [counter|acc]) else do_find_indexes(t, function, counter + 1, acc) end end end IO.puts "Sample1" IO.inspect Sample1.find_indexes(["a", "b", "c", "b", "b"], fn(x) -> x == "a" end) IO.inspect Sample1.find_indexes(["a", "b", "c", "b", "b"], fn(x) -> x == "c" end) IO.inspect Sample1.find_indexes(["a", "b", "c", "b", "b"], fn(x) -> x == "b" end) IO.puts "Sample2" IO.inspect Sample2.find_indexes(["a", "b", "c", "b", "b"], fn(x) -> x == "a" end) IO.inspect Sample2.find_indexes(["a", "b", "c", "b", "b"], fn(x) -> x == "c" end) IO.inspect Sample2.find_indexes(["a", "b", "c", "b", "b"], fn(x) -> x == "b" end)
It is carried out as follows:
% elixir find.ex Sample1 [0] [2] [1, 3, 4] Sample2 [0] [2] [1, 3, 4]