2017-09-18 78 views
0

我想减少列表并将一些数据添加到地图中。 的代码是这样的:Elixir减少列表并添加到地图

map = Enum.reduce(1..1000, %{}, fn(x, accumalator) ->(
      calculate a hash of a string 
      if condition is fulfilled do 
       Map.put(accumalator, string, hash) 
      end  
     )end) 

这是给我一个坏的地图错误说Map.put()正在接收的认沽功能的nil值。

我想要做的是这样的:对于所有的迭代计算哈希,如果满足关于哈希的一些条件,则将哈希和随机数添加到地图中。所以我希望地图持久。我哪里错了? 这answer也建议同样的事情,但是失败。

+1

你可能想在你的条件没有满足的情况下,如果条件不满足,那么if表达式将返回'nil',因为这是函数中的最后一个表达式,即返回的内容。 –

回答

4

函数返回的值在下一次迭代中成为累加器。在您定义的函数中,如果条件为假,则if返回nil,在下一次迭代中accumulatornil。你需要做的是添加一个else块并返回未修改的accumulator值。

Enum.reduce(1..1000, %{}, fn(x, accumulator) -> 
    ... 
    if condition do 
    Map.put(accumulator, string, hash) 
    else 
    accumulator 
    end 
end)