【发布时间】:2014-02-21 05:31:41
【问题描述】:
我有一个元组列表,我想从元组中的特定位置创建一个元素列表。
我的元组是 {A, B},我在一个列表中有几个,我想创建所有 B 元素的列表。
干杯!
【问题讨论】:
我有一个元组列表,我想从元组中的特定位置创建一个元素列表。
我的元组是 {A, B},我在一个列表中有几个,我想创建所有 B 元素的列表。
干杯!
【问题讨论】:
您可以使用列表:地图。
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]
传递给映射的函数将从元组中选择所需的元素,结果将是给定元组列表中该特定位置的所有元素的列表。上面的代码假设所有元组都有相同数量的元素。
【讨论】:
另一种方法是只使用简单的列表推导:
[B || {_, B} <- L].
【讨论】:
[b1, b2] = [ B || {_, B} <- [{a1, b1}, {a2, b2}, {a3, b3, c3}] ]. 在某些情况下它是可取的,在某些情况下不是。
> 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]
【讨论】:
这是一个快速示例,未经测试,但应该可以工作。
split_tuples([{A | B} | T], Acc) ->
NewAcc = [B | Acc],
split_tuples(T, NewAcc);
split_tuples([], Acc) ->
lists:reverse(Acc).
【讨论】:
erlang 的 element/2 函数就是这样做的:从元组中返回第 n 个元素。
将其放入 map 或 fold 函数中,并以位置为参数,就完成了。
编辑:一些未经测试的代码示例:
get_them_all(ListOfTuples,Index) ->
lists:map(fun(Tuple) -> element(Index,Tuple) end,ListOfTuples).
【讨论】: