更新proplist erlang

更新proplist erlang,list,erlang,tuples,List,Erlang,Tuples,我的第一个问题是,我们可以更新一个proplist还是一个proplist的元组?如果是这样,我必须替换proplist的元组值: 假设我 L = [{a, A}, {b, B}, {c, C}, {d, D}, {e, E} ...] 我想用一个新的元组{b,b}替换一个元组{b,new_b_值},用元组d替换相同的元组{d,new_d_值}。所以输出应该是这样的: L = [{a, A}, {b, New_B_Value}, {c, C}, {d, D}, {d, New_D_Valu

我的第一个问题是,我们可以更新一个proplist还是一个proplist的元组?如果是这样,我必须替换proplist的元组值: 假设我

 L = [{a, A}, {b, B}, {c, C}, {d, D}, {e, E} ...]
我想用一个新的元组
{b,b}
替换一个元组
{b,new_b_值}
,用元组
d
替换相同的元组
{d,new_d_值}
。所以输出应该是这样的:

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

提前谢谢

如果不需要灵活性,可以使用一些子句来匹配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).

您可以使用lists:keyreplace/4功能:

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

我在寻找同样的…:)你也可以只做
[{b,NewBValue}|L]
而忽略重复。然后通过
lists:ukeysort/2
@IGIVECRAPANSWERS实现“垃圾收集”,好的,谢谢,我也会检查一下。