Эликсир: как отфильтровать карту по ключам
У меня есть карта с парами ключ-значение и кортеж с атомами. Я хочу удалить любую запись с карты, где ключ не является атомом в кортеж
m = %{value1: nil, value2: nil, value4: nil}
t = {:value1, :value3, :value4}
# The result should be %{value1: nil, value4: nil}
это своего рода проблема пересечения. Я заглянул в Enum.filter
и MapSet
но не нашел элегантного решения. Это должно быть общей проблемой и ваш вклад высоко ценится.
1 ответов
использовать Map.take/2
и Tuple.to_list/1
:
iex(1)> m = %{value1: nil, value2: nil, value4: nil}
%{value1: nil, value2: nil, value4: nil}
iex(2)> t = {:value1, :value3, :value4}
{:value1, :value3, :value4}
iex(3)> Map.take(m, Tuple.to_list(t))
%{value1: nil, value4: nil}