2016-12-05 61 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