Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

erlang list manipulation

Tags:

list

erlang

I have a list of tuples:

L = [{1, [a, b, c]}, {2, [d, e, f]}, {3, [[h, i, j], [k, l, m]]}]

this is what I have

lists:map(fun({_, B}-> B end, L).

the output is

[[a, b, c], [d, e, f], [[h, i, j], [k, l, m]]]

what I want is:

[[a, b, c], [d, e, f], [h, i, j], [k, l, m]]

it seems a pretty easy problem, but I can't figure out how to do it. Please help!

like image 638
Quincy Avatar asked Dec 20 '25 08:12

Quincy


1 Answers

Let's see...

1> L = [{1, [a, b, c]}, {2, [d, e, f]}, {3, [[h, i, j], [k, l, m]]}].
[{1,[a,b,c]},{2,[d,e,f]},{3,[[h,i,j],[k,l,m]]}]

Trivial and straightforward, but not tail-recursive:

2> lists:foldr(fun ({_,[X|_]=E},A) when is_list(X) -> lists:append(A,E);
                   ({_,E},A) -> [E|A] end,
                [], L).
[[a,b,c],[d,e,f],[h,i,j],[k,l,m]]

Not being tail-recursive is not very nice, though, but...

3> lists:reverse(lists:foldl(fun ({_,[X|_]=E},A) when is_list(X) ->
                                     lists:reverse(E,A);
                                 ({_,E},A) -> [E|A] end,
                             [], L)).
[[a,b,c],[d,e,f],[h,i,j],[k,l,m]]

...the tail-recursive version also works (thanks to Zed for pointing out lists:reverse/2).

like image 185
ndim Avatar answered Dec 22 '25 07:12

ndim



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!