Erlang:从proplist中删除单个元素

时间:2015-11-16 15:25:08

标签: list erlang

我正在尝试从proplist中删除单个顶部元素。我该怎么做呢。

我有一个这样的支持者:

[{listA,[a,b,c]},{listB,[d,e]}]

那么如何从listA中删除top元素?

2 个答案:

答案 0 :(得分:2)

您可以使用lists:keytake/3获取元素,然后修改它并将其放回:

1> List = [{listA,[a,b,c]},{listB,[d,e]}].
[{listA,[a,b,c]},{listB,[d,e]}]
2> lists:keytake(listA, 1, List).
{value,{listA,[a,b,c]},[{listB,[d,e]}]}
3> {value, {listA, [_|Items]}, Options} = lists:keytake(listA, 1, List).
{value,{listA,[a,b,c]},[{listB,[d,e]}]}
4> [{listA, Items}|Options].
[{listA,[b,c]},{listB,[d,e]}]

答案 1 :(得分:2)

remove_head(Name, PropList) ->
    lists:reverse(
      remove_head(Name, PropList, [])
    ).

remove_head(_Name, [], Results) -> Results;

remove_head(Name, [ {Name, [_H|T]} | Tail ], Results) ->
    remove_head(Name, Tail, [{Name, T}|Results]);

remove_head(Name, [H|T], Results) -> 
    remove_head(Name, T, [H|Results]).

示例:

47> c(my).
{ok,my}

48> P1= [
48> {listA, [a,b,c]},
48> {listB, [d,e]}   
48> ].
[{listA,[a,b,c]},{listB,[d,e]}]

49> my:remove_head(listA, P1).                                                     
[{listA,[b,c]},{listB,[d,e]}]

50> P2 = [
50> {listA, [a,b,c]},
50> {listB, [d,e]}, 
50> {listA, [y, x, x]}
50> ].
[{listA,[a,b,c]},{listB,[d,e]},{listA,[y,x,x]}]

51> my:remove_head(listA, P2).
[{listA,[b,c]},{listB,[d,e]},{listA,[x,x]}]