如何在Erlang中删除orddict

How to delete orddict in Erlang

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

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

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

我如何擦除所有的键?在我的案例 X 中,我需要在 fun -> erase 方法中使用外部变量吗?

当你在你的代码中尝试时,你不能删除 orddict 中的密钥,但你可以在没有密钥的情况下创建它的副本。

如果你想删除所有的键,只要按照@choroba 说的做,创建一个新的orddict。

如果你想删除多个但不是所有的键,有很多方法可以实现你想要的,我建议你使用函数 take 的解决方案,来自 orddict 库:

take(Key, Orddict) -> {Value, Orddict1}

| error

Orddict = Orddict1 = orddict(Key, Value)

Key = Value = term()

This function returns value from dictionary and new dictionary without this value. Returns error if the key is not present in the dictionary.

首先你创建一个函数,它将一个键和一个字典作为参数,return一个没有键的字典(如果存在)

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库,你可以用erase函数替换 F with G = fun(X,Dict) -> orddict:erase(X,Dict) end.

然后您可以将此函数与列表一起使用:fold/3 到 "remove" 在您的字典中,列表中的所有键:

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>