【问题标题】:Update proplist erlang更新proplist erlang
【发布时间】:2014-07-14 20:14:25
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

  • 我正在寻找相同的...:)
  • 您也可以只做[{b, NewBValue} | L] 并忽略重复。然后由lists:ukeysort/2实现“垃圾回收”。
  • @IGIVECRAPANSWERS,好的,谢谢,我也会检查一下。

标签: list erlang tuples


【解决方案1】:

你可以使用lists:keyreplace/4函数:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2010-12-08
      • 2020-01-01
      • 2013-04-16
      • 2011-08-31
      • 2017-04-04
      相关资源
      最近更新 更多