Erlang通过拆分元组列表来创建列表

时间:2014-02-20 10:39:37

标签: list erlang tuples

我有一个元组列表,我想从元组中的特定位置创建一个元素列表。

我的元组是{A,B},我在列表中有几个,我想创建所有B元素的列表。

干杯!

5 个答案:

答案 0 :(得分:3)

您可以使用列表:map。

1> A = [{1,2},{3,4},{5,6}].
[{1,2},{3,4},{5,6}]
2> B = lists:map(fun ({_, V}) -> V end, A).
[2,4,6]

传递给地图的函数将从元组中选择所需的元素,结果将是给定元组列表中该特定位置的所有元素的列表。上面的代码假定所有元组都有相同数量的元素。

答案 1 :(得分:3)

另一种方法是使用简单的列表理解:

[B || {_, B} <- L].

答案 2 :(得分:1)

> L = [{a1,b1}, {a2,b2}, {a3,b3}].
[{a1,b1},{a2,b2},{a3,b3}]
> lists:foldr(fun({_, B}, Acc) -> [B | Acc] end, [], L).
[b1,b2,b3]

答案 3 :(得分:0)

这是一个快速的样本,未经过测试,但应该可以使用。

split_tuples([{A | B} | T], Acc) ->
    NewAcc = [B | Acc],
    split_tuples(T, NewAcc);
split_tuples([], Acc) ->
    lists:reverse(Acc).

答案 4 :(得分:0)

erlang的element/2函数就是这样:从元组返回第n个元素。

将它放在地图或折叠函数中,将位置作为参数,然后就完成了。


编辑:一些未经测试的代码示例:

get_them_all(ListOfTuples,Index) ->
    lists:map(fun(Tuple) -> element(Index,Tuple) end,ListOfTuples).