我希望能够删除Erlang中的多个键,也可以删除所有字典。
到目前为止,我已经尝试过:
X=[{1,2},{3,4}].
Deleted=orddict:fold(fun({K,V})->orddict:erase(K,X) end ,[],X).如何删除所有键?是否需要在fun -> erase方法中使用fun->erase方法中的外部变量?
发布于 2019-10-27 07:29:53
当您在代码中尝试时,您不能在orddict中擦除键,但是您可以在没有键的情况下创建该键的副本。
如果您想删除所有的键,只需按@choroba所说的做,就创建一个新的orddict。
如果您想要删除多个但不是所有的键,有许多方法可以实现您想要的结果,我建议您使用函数采取的解决方案,从orddict库:
采取(键,Orddict) -> {Value,Orddict1}
[计]误差
Orddict = Orddict1 = orddict(Key,Value)
Key = Value = term()
此函数返回不带此值的字典和新字典中的值。如果字典中不存在键,则返回错误。
首先,您创建一个函数,该函数以键作为参数,将键作为Dict,然后返回不带键的dict (如果存在)。
1> F = fun(X,Dict) -> case orddict:take(X,Dict) of
1> {_,New} -> New;
1> error -> Dict
1> end
1> end.
#Fun<erl_eval.13.91303403>编辑:我没有检查orddict库,您可以使用擦除函数将F替换为G = fun(X,Dict) -> orddict:erase(X,Dict) end.
然后,您可以将此函数与list:折叠/3一起使用,以“删除”列表中的所有键:
2> O1 =orddict:from_list([{1,a},{2,b},{3,c},{4,d}]).
[{1,a},{2,b},{3,c},{4,d}]
3> O2 = lists:foldl(F,O1,[3,1]).
[{2,b},{4,d}]
4> O3 = lists:foldl(F,O1,[3,5]).
[{1,a},{2,b},{4,d}]
5> https://stackoverflow.com/questions/58574984
复制相似问题