Often I want to create a list in Elixir that contains certain elements, but only if specific conditions are met for each element or group of elements.
In a language with mutable data, it would be something like
array = [0]
if (cond1) {
array.push(1)
}
if (cond2) {
array.push(2)
}
if (cond3) {
array.push(3)
}
return array
How would you re-write this in Elixir?
Currently I’ve been creating separate lists for each condition and concatenating them in the end:
initial = [0]
list_1 = if cond1 do
[1]
else
[]
end
list_2 = if cond2 do
[2]
else
[]
end
list_3 = if cond3 do
[3]
else
[]
end
Enum.concat(initial, list_1)
|> Enum.concat(list_2)
|> Enum.concat(list_3)
This works but it’s not great, because I have to make sure I return an empty list every time. In some cases where logic in the if-block is complicated, it could lead to a lot of else [] end.
Any ideas how to refactor this to something more concise and/or avoid repetition are appreciated. Thanks!


















