使用Elixir插入地图键

时间:2019-08-01 09:36:39

标签: elixir

r = Date.range(~D[2019-07-01], ~D[2019-07-31])
q =
    %{
      ~D[2019-07-22] => 387,
      ~D[2019-07-23] => 256,
      ~D[2019-07-24] => 117,
      ~D[2019-07-25] => 1
    }

我有一个可枚举的日期范围,并且我尝试为date => 0中不存在的每个日期添加q

使用for循环会很容易,但这不是一个选择。我尝试了各种Enum.map函数,我很确定那不是我想要的。我想我想使用reduce,但不确定。

我该如何处理?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用Map.put_new/3

Enum.reduce(r, q, &Map.put_new(&2, &1, 0))

具有较低的Kernel.SpecialForms.for/1理解力的版本(每次迭代都会查找地图):

for date <- r, do: {date, Map.get(q, date, 0)}, into: %{}