erlang 如何删除基于非关键部件的ets条目

e0bqpujr  于 11个月前  发布在  Erlang
关注(0)|答案(2)|浏览(162)

我有一个etc表'table'作为{key,[val 1,val 2]}我从表中选择了此数据,使用

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

字符串
我想删除与部件[val 1,val 2]匹配的条目,使用此

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">>]]]


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

vfhzx4xs

vfhzx4xs1#

我也遇到了这个问题,并解决了它只是 Package 在括号中的true
解决方案如下:

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

字符串

jgwigjjp

jgwigjjp2#

ets:select_delete文档说:
如果要删除对象,match规范必须返回原子true。没有其他返回值可以删除对象。因此,不能使用相同的match规范来查找元素和删除它们。
所以试试这个:

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

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

相关问题