2014-02-20 3 views
0

У меня есть список кортежей, и я хочу создать список элементов из определенной позиции в кортеже.Erlang, создавая список, разбивая список кортежей

Мой кортеж {A, B}, и у меня есть несколько из них в списке, и я хочу создать список всех элементов B.

Cheers!

+0

возможный дубликат [Как построить список элементов, извлеченных из списка кортежей в Erlang?] (http://stackoverflow.com/questions/23626189/how-do-i-build-a-list-of-elements-extracted-from-a-list- of-tuples-in-erlang) – aronisstav

ответ

0

Это быстрый образец, не проверенный, но он должен работать.

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

Вы можете использовать списки: карта.

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] 

функция перешла к карте будет выбрать элемент, требуемый от кортежа, и результат будет списком всех элементов в этой конкретной позиции в данном списке кортежей. В приведенном выше коде предполагается, что все кортежи имеют одинаковое количество элементов.

+0

Приветствия! Работы beutifuly – user2270439

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] 
0

element/2 функция Эрланга делает только что: вернуть п-й элемент из кортежа.

Положите это на карту или функцию сгиба, с положением в качестве параметра, и все готово.


редактировать: некоторые непроверенные пример кода:

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

Еще один способ это просто использовать простой список понимание:

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

Было бы удобно знать, если вы выбираете это решение: если список содержит кортежи с другими, то 2 элементами, они будут пропущены. например: '[b1, b2] = [B || {_, B} <- [{a1, b1}, {a2, b2}, {a3, b3, c3}]]. В некоторых случаях это желательно в некоторых случаях. – danechkin

Смежные вопросы