2012-10-05 2 views
4

Google 및 이전 답변에서 관련 문제 및 솔루션을 볼 수 있지만 모두 저를 당황하게합니다.Erlang에서 id 값을 가진 레코드 목록에서 전체 레코드를 반환하려면 어떻게해야합니까?

내가 각각 id를 가진 레코드 목록을 가지고 있다고 가정 해 봅시다. 말 : 나는 get_record 같은 함수를 찾고 있어요

-record(blah, {id, data}). 
Record2#blah.id = 7 
L = [Record1, Record2, ... ] 

(목록, ID) 안에 해당 레코드를 반환합니다 전체, 예를 들면 다음과 같습니다

22> get_record(L, 7). 
{blah, id=7, data="ta da!"} 

많은 감사,

LRP

나는

답변

9

내부적으로 기록이 {Name, v1, v2}의 튜플이 s입니다 o 예제 레코드는 터플로 {blah, 7, data}처럼 보일 것입니다. 염두에두고

, 당신은 목록에서 기록을 조회 할 lists:keyfind/3 기능을 사용할 수 있습니다 :

lists:keyfind(7, #blah.id, L). 

여기에 첫 번째 인수는 두 번째 인수는 ID 필드의 튜플 인덱스 ID 값입니다 세 번째 인수가 목록입니다.

#Name.Field 구문을 사용하면 모든 레코드 필드에 대한 필드 인덱스를 얻을 수 있습니다.

+0

감사합니다. Tilman과 Rob. 내 자신에 조금 비틀 거리고 난 후에 나는 목록 이해력을 계산했다. 내가 keyfind 솔루션을 알아 내려고했지만 필드에 액세스하는 방법을 이해하지 못했습니다. 도움을 많이 주셔서 감사합니다. –

5
는 또한 ID와 일치 목록에 당신에게 모든 레코드를 줄 것이다

[R || R <- Records, R#blah.id == 7] 

처럼, 지능형리스트를 사용할 수

.

관련 문제