首页 > 解决方案 > 如何删除基于非关键部分的ets条目

问题描述

我有一个 etc 表“表”作为 {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

但是当我再次运行选择时,我得到了

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

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

标签: erlang

解决方案


ets:select_delete文档说:

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

所以试试这个:

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

ets:select_delete返回它删除的记录数,所以希望这次它应该返回 1。


推荐阅读