如何在Erlang中删除orddict

Ber*_*ian 1 erlang dictionary

我希望能够删除Erlang中的多个键,并且也有一种擦除所有字典的方法。

到目前为止,我已经尝试过:

X=[{1,2},{3,4}].
Deleted=orddict:fold(fun({K,V})->orddict:erase(K,X) end ,[],X).
Run Code Online (Sandbox Code Playgroud)

我该如何擦除所有键?我是否需要Xfun-> erase方法中使用外部变量?

Pas*_*cal 6

尝试输入代码时,无法删除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)