erlang列表过滤器问题

0xA*_*xAX 1 erlang list filter

我有清单 - Sep1:

[
   ....
   ["Message-ID", "AAAAAAAAAAAAAAAAAAA"],
   ["To", "BBBBBBBBBBBBBBBBB"]
   ...
]
Run Code Online (Sandbox Code Playgroud)

我尝试获取第一项= Message_ID的元素,例如:

lists:filter(fun(Y) -> (lists:nth(1,lists:nth(1,Y)) =:= "Message-ID") end, Sep1).
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

 exception error: no function clause matching lists:nth(1,[])

 in function  utils:'-parse_to/1-fun-1-'/1

 in call from lists:'-filter/2-lc$^0/1-0-'/2
Run Code Online (Sandbox Code Playgroud)

但如果我:

io:format(lists:nth(1,lists:nth(1,Sep1))).
> Message-ID
Run Code Online (Sandbox Code Playgroud)

怎么了?

谢谢.

hdi*_*ima 5

这是更好地改变代表权[{Key, Value}, ...],因此您可以用列表:*键功能,proplists模块,或将其转换为字典词典:from_list/1.

但是如果您仍然想使用列表:filter/2,您可以按第一个元素过滤列表列表,如下所示:

lists:filter(fun ([K | _]) -> K =:= "Message-ID" end, ListOfLists).
Run Code Online (Sandbox Code Playgroud)

如果要提取第一个元素与"Message-ID"匹配的列表尾部,可以使用列表推导:

[Tail || ["Message-ID" | Tail] <- ListOfLists].
Run Code Online (Sandbox Code Playgroud)

  • 此外,你可以直接模式匹配,即`fun(["Message-ID"| _]) - > true; (_) - > false end`. (2认同)