更新proplist erlang

时间:2014-05-26 05:59:58

标签: list erlang tuples

我的第一个问题是,我们可以更新一个支持列表或一个支持列表的元组吗?如果是这样,我必须替换一个proplist的元组值: 假设L,

 L = [{a, A}, {b, B}, {c, C}, {d, D}, {e, E} ...]

我想用新元组{b, B}替换元组{b, New_B_Value},并将元组d替换为{d, New_D_Value}。所以输出应该是这样的:

 L = [{a, A}, {b, New_B_Value}, {c, C}, {d, D}, {d, New_D_Value} ...]

提前致谢!

2 个答案:

答案 0 :(得分:10)

您可以使用list:keyreplace / 4 function:

lists:keyreplace(b, 1, L, {b, New_B_Value}).
lists:keyreplace(d, 1, L, {d, New_D_Value}).

答案 1 :(得分:1)

如果不需要灵活性,您可以使用一些子句来匹配b和d的元组并执行替换。

-module(t).

-export([test/0]).


test() ->
    L = [{a, valA}, {b, valB}, {c, valC}, {d, valD}, {e, valE}],
    test(L, [], new_b_value, new_d_value).

test([], A, _NewB, _NewD) -> A;
test([{b, _}|Rest], A, NewB, NewD) -> 
    test(Rest, A++[{b, NewB}], NewB, NewD);
test([{d, _}|Rest], A, NewB, NewD) -> 
    test(Rest, A++[{d, NewD}], NewB, NewD);
test([H|Rest], A, NewB, NewD) -> 
    test(Rest, A++[H], NewB, NewD).