2016-07-28 32 views
1

我有一個地圖(的Ecto.Changeset錯誤)這樣的:如何以優雅的方式將具有數組值的映射轉換爲字符串列表?

%{ 
    field_a: ["error 1", "error 2"], 
    field_b: ["something here"] 
} 

我想這是一個

[ 
    "field_a error 1", 
    "field_a error 2", 
    "field_b something here" 
] 

我試着用

Enum.map(map, fn({ key, errors }) -> 
    # another anonymous function which generates strings 
end) 

來實現它,但是有一個編譯錯誤,因爲elixir doesn't support nested anonymous functions right now

我該如何實現這個轉換?

回答

3

雖然可以使用Enum.flat_map,我相信for會更清楚在這裏:

errors = %{ 
    field_a: ["error 1", "error 2"], 
    field_b: ["something here"] 
} 

formatted = 
    for {field, messages} <- errors, 
     message <- messages, 
     do: "#{field} #{message}" 

IO.inspect formatted 

輸出:

["field_a error 1", "field_a error 2", "field_b something here"] 

但由於仙丹沒有得到一個編譯錯誤現在支持嵌套的匿名功能。

這是匿名的遞歸函數; Elixir支持嵌套的匿名函數。

+0

太棒了!謝謝 – asiniy

相關問題