如何基于非关键部分删除ets条目

时间:2019-03-08 08:22:45

标签: erlang

我有一个etc表'table'作为{key,[val1,val2]} 我使用

从表中选择了此数据
ets:select(table,[{{‘$1','$2'},[],['$$']}]).                                
 [[key,["val1",<<"12">>]],
 [key,["val2",<<"6">>]],
 [key,["val3",<<"16">>]]]

我要使用此内容删除与[val1,val2]部分匹配的条目

ets:select_delete(table,[{{‘$1','$2'},[{'==','$2',["val1",<<"12">>]}],['$$']}]).
 0

但是当我再次运行select时,我仍然得到

ets:select(table,[{{‘$1','$2'},[],['$$']}]).                                
 [[key,["val1",<<"12">>]],
 [key,["val2",<<"6">>]],
 [key,["val3",<<"16">>]]]

如何根据非关键部分删除此项?

1 个答案:

答案 0 :(得分:0)

ets:select_delete documentation说:

  

如果要删除对象,则匹配规范必须返回原子true。没有其他返回值会删除该对象。因此,不能使用与删除元素相同的匹配规范。

所以尝试一下:

ets:select_delete(table,[{{'$1','$2'},[{'==','$2',["val1",<<"12">>]}],true}]).

ets:select_delete返回其已删除的记录数,因此希望它这次应返回1。