我希望能够删除Erlang中的多个键,并且还具有擦除所有字典的方法。
我到目前为止已经尝试过:
X=[{1,2},{3,4}].
Deleted=orddict:fold(fun({K,V})->orddict:erase(K,X) end ,[],X).
如何擦除所有键?在我的情况下,在X
-> fun
方法中是否需要使用外部变量erase
?
当您尝试使用代码时,无法删除命令中的键,但是可以创建没有键的副本。
如果要删除所有键,只需执行@choroba所说的,创建一个新命令。
如果要删除多个但不是全部的键,有很多方法可以实现所需的功能,我建议您使用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>
编辑:我没有检查orddict库,可以使用擦除功能替换]]F
with 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>