[erlang]ets中bag表类型应用

发布于 2022-09-06 21:18:44 字数 1259 浏览 12 评论 0

其它参考:ets和record无逢结合

ets默认创建的为set类型表,既每条记录关健字唯一的表,但很多时候创建一个表有多个相同的关健字,如一个类似sns好友对应表:

uid friendId
-------------
101 201
101 202
101 203
....

初始化一个record,在文件 t.hrl 中:
-record(t, {uid,friendId}).
引入Eshell
>rr("t.hrl").
[t]

这时我们需要一个bag类型的ets表,以uid做主键:
>ets:new(t,[public,bag,named_table,{keypos, #t.uid}]).
t

在uid=101的关键字下新增记录:
>ets:insert(t,#t{uid=101,friendId=201}),
ets:insert(t,#t{uid=101,friendId=202}),
ets:insert(t,#t{uid=101,friendId=203}).
true

查看uid=101的所有记录:
>ets:lookup(t,101).
[#t{uid = 101,friendId = 201},
#t{uid = 101,friendId = 202},
#t{uid = 101,friendId = 203}]

删除friendId=202的记录
>ets:delete_object(t,#t{uid=101,friendId=202}).
true
再次查看是否已经删除
>ets:lookup(t,101).                           
[#t{uid = 101,friendId = 201},#t{uid = 101,friendId = 203}]

ok,friendId=202的记录已经删除.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文