2017-09-18 74 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)