我想知道是否可以使用列表:在这种情况下重复:
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 :(得分: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]
顺便说一句,你也可以在原始列表理解方法中使用lists:duplicate/2
:
decompress([]) ->
[];
decompress(L) ->
[Y || {X,Y} <- L, _ <- lists:duplicate(X,Y)].
这是有效的,因为我们不使用lists:seq/2
或lists:duplicate/2
生成的值,而是仅使用它们生成的项目数。