如何删除Erlang中的orddict

问题描述 投票:0回答:1

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

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

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

如何擦除所有键?在我的情况下,在X-> fun方法中是否需要使用外部变量erase

dictionary erlang
1个回答
0
投票

当您尝试使用代码时,无法删除命令中的键,但是可以创建没有键的副本。

如果要删除所有键,只需执行@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库,可以使用擦除功能替换]]Fwith 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> 
© www.soinside.com 2019 - 2024. All rights reserved.