2014-02-20 2 views
0

튜플 목록이 있는데 튜플의 특정 위치에서 요소 목록을 만들고 싶습니다.튜플 목록을 분할하여 목록을 생성하는 방법

내 튜플은 {A, B}이고 이들 중 몇 개는 목록에 있으며 모든 B 요소의 목록을 만들고 싶습니다.

건배!

+0

중복 가능성을 [I가 어떻게 구축 할 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

lists : 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] 

함수 튜플에서 필요한 요소를 선택할 것이고, 그 결과는 튜플들의 주어진리스트의 특정 위치에서 모든 요소들의리스트 것이다. 위의 코드는 모든 튜플의 요소 수가 같다고 가정합니다.

+0

건배! Works 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

erlang의 element/2 함수는 튜플에서 n 번째 요소를 반환합니다.

위치를 매개 변수로 사용하여지도 또는 접기 기능에 넣으면 완료됩니다.


편집 : 일부 검증되지 않은 코드 예제 :

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

관련 문제