2016-11-10 7 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] 

私はタプルの第1および第2の要素を取得するために管理します。 リストの理解がある解決策がありますが、私はそれを実行することができません。

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

答えて

0

リストの内包表記を使用しなければ、我々は結果を作成するためにlists:duplicate/2を使用することができますが、私たちは、所望の最終的な答えを得るためにそれを平らにする必要があります。我々は取得したいflattenなければ

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

を最初の結果ではなく、二正しい結果を、以下に示す:ところで

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のアプローチは:ここで私たちはlists:seq/2またはlists:duplicate/2によって生成された値を使用していないので、

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

これは動作しますが、むしろ、我々は、彼らが生産するアイテムの数を使用します。

+1

マップの結果を平坦化する代わりに、 'lists:flatmap'を使うことができます。 – rvirding

関連する問題