Эликсир: как отфильтровать карту по ключам

У меня есть карта с парами ключ-значение и кортеж с атомами. Я хочу удалить любую запись с карты, где ключ не является атомом в кортеж

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}