2016-11-10 22 views
0

我想知道,如果它可以使用列表:重複在這種情況下:如何使用列表:重複?

decompress_1([])-> 
     []; 
decompress_1(L)-> 
     MyNum = lists:map(fun(T)-> element(1,T) end,L), 
     Res = lists:map(fun(T)-> element(2,T) end,L). 

獲得:

decompress_1([{3,1},{3,2},{1,5},{1,4},{1,1},{1,0},{1,1}]) == [1,1,1,2,2,2,5,4,1,0,1] 

我只是設法檢索的元組的第一和第二元素。 有一個列表理解的解決方案,但我會知道沒有。

decompress([]) -> 
    []; 
decompress(L) -> 
    [Y || {X, Y} <- L, _ <- lists:seq(1, X)]. 

回答

0

,不使用列表解析,我們可以使用lists:duplicate/2創造的結果,但我們必須壓平,以獲得所需的最終答案:

decompress([]) -> 
    []; 
decompress(L) -> 
    lists:flatten(lists:map(fun({X,Y}) -> 
            lists:duplicate(X,Y) 
          end, L)). 

沒有flatten我們會得到第一個結果如下圖所示,而不是第二個正確的結果:

1> decompress_no_flatten([{3,1},{3,2},{1,5},{1,4},{1,1},{1,0},{1,1}]). 
[[1,1,1],[2,2,2],[5],[4],[1],[0],[1]] 
2> decompress([{3,1},{3,2},{1,5},{1,4},{1,1},{1,0},{1,1}]). 
[1,1,1,2,2,2,5,4,1,0,1] 

順便說一句,你可以在原始列表COMPRE使用lists:duplicate/2 hension方法,以及:

decompress([]) -> 
    []; 
decompress(L) -> 
    [Y || {X,Y} <- L, _ <- lists:duplicate(X,Y)]. 

這工作,因爲在這裏我們不使用由lists:seq/2lists:duplicate/2產生的價值,而我們只用他們生產的項目數。

+1

您可以使用'lists:flatmap'來代替繪製地圖的結果。 – rvirding