2011-02-11 102 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