我希望能够删除Erlang中的多个键,并且也有一种擦除所有字典的方法。
到目前为止,我已经尝试过:
X=[{1,2},{3,4}].
Deleted=orddict:fold(fun({K,V})->orddict:erase(K,X) end ,[],X).
Run Code Online (Sandbox Code Playgroud)
我该如何擦除所有键?我是否需要X在fun-> erase方法中使用外部变量?
尝试输入代码时,无法删除orddict中的键,但是可以创建不带键的副本。
如果要删除所有键,只需执行@choroba所说的,创建一个新的orddict。
如果您想删除多个但不是全部的键,有很多方法可以实现您想要的,我建议您使用orddict库中的take函数实现一个解决方案:
take(Key,Orddict)-> {Value,Orddict1}
| 错误
Orddict = Orddict1 = orddict(键,值)
键=值= 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>
Run Code Online (Sandbox Code Playgroud)
编辑:我没有检查orddict库,可以使用擦除功能替换 F 为 G = fun(X,Dict) -> orddict:erase(X,Dict) end.
然后,您可以将此函数与list:fold / 3一起使用,以在dict中“删除”列表中的所有键:
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>
Run Code Online (Sandbox Code Playgroud)