2016-12-05 58 views
1

說我有一個列表:如何使用「地圖」將列表轉換爲略有不同的列表?

my_list = [age: {"is invalid", []}, name: {"can't be blank", []}] 

我無法弄清楚如何將它轉換爲是這樣的:

[age: "is invalid", name: "can't be blank"] 

我必須使用Enum.map,但我究竟應該將一個轉換爲另一個?

Enum.map(my_list, fn(a) -> ???? end) 

請注意,密鑰的名稱在編譯時未知。

回答

3

您可以使用此功能:fn {field, {reason, _}} -> {field, reason} endEnum.map/2

iex(1)> my_list = [age: {"is invalid", []}, name: {"can't be blank", []}] 
[age: {"is invalid", []}, name: {"can't be blank", []}] 
iex(2)> Enum.map(my_list, fn {field, {reason, _}} -> {field, reason} end) 
[age: "is invalid", name: "can't be blank"] 

您還可以使用for

iex(3)> for {field, {reason, _}} <- my_list, do: {field, reason} 
[age: "is invalid", name: "can't be blank"] 
+0

您也可以嘗試使用'ELEM/2'但使用模式匹配明顯mor可讀。 – PatNowak