2011-02-11 105 views
3

我有我列出:二郎地图嵌套列表

[["asd", "ddsa"], ["ASD", "ASD"], ["FH", "SDFDF]]. 

我怎么可以applicate函数F到该列表中的每个元素?我如何映射这个列表?

谢谢。

回答

2

你可以定义一个deepMap功能,执行是这样的:如果输入的是不是一个清单,评估你的函数

deepMap(Fun, T) -> 
    case is_list(T) of 
    true -> lists:map(fun(E) -> deepMap(Fun,E) end, T); 
    false -> Fun(T) 
    end. 

。如果是列表,则使用map,将deepMap应用于所有使用函数的元素。

+5

在这种情况下,您实际上需要不同的代码,因为字符串也是列表。此代码将为每个字符(整数)调用Fun。 – 2011-02-12 04:13:17

7

如果通过元素来表示你的意思是“asd”,那么你的主List将总是像你的例子那样深两级,并且你的返回结果应该是相同的格式,这将是应该的。

List1 = [["asd", "ddsa"], ["ASD", "ASD"], ["FH", "SDFDF]] 
[ [ F(String) || String <- List2 ] || List2 <- List1 ] 

如果你的意思是,你的元素[“ASD”,“DDSA”]只是使用列表:地图/ 2或列表理解如下。

List1 = [["asd", "ddsa"], ["ASD", "ASD"], ["FH", "SDFDF]] 
[ F(List2) || List2 <- List1 ] 
+4

如果你想扁平化列表并返回一个不符合要求的值列表,你可以这样做[[F(String)||]。 SubList < - List,String < - SubList]`。 – rvirding 2011-02-11 13:39:25