首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联合ETS表

联合ETS表
EN

Stack Overflow用户
提问于 2013-08-02 20:50:59
回答 1查看 190关注 0票数 0

我尝试将两个ETS表合并为一个ETS表。我知道的唯一方法是创建第三个表,并将两个表的记录插入到第三个表中。有没有更好的方法?

EN

回答 1

Stack Overflow用户

发布于 2013-08-06 16:10:18

ets:insert允许元组列表。另一方面,ets:tab2list将ets表导出为元组列表。这意味着您可以轻松地将一个ets表导入到另一个表中。

不完全是一个联合,但是您最终得到了一个包含前面两个表的表,而没有创建第三个ets表,这似乎是您试图实现的目标。

下面是一个小示例:

代码语言:javascript
复制
ets:new(list_a,[named_table]).
ets:new(list_b,[named_table]).

ets:insert(list_a,{one,1}).
ets:insert(list_b,{two,2}).
ets:insert(list_b,{three,3}).

ets:insert(list_a,ets:tab2list(list_b)).

ets:tab2list(list_a).
% list_a = [{three,3},{two,2},{one,1}]

相同键的情况下会发生什么取决于您正在使用的ETS表的类型(erlang doc):

如果表是一个集合,并且插入对象的键与表中任何对象的键匹配,则旧对象将被替换。如果表是一个ordered_set,并且插入的对象的键与表中任何对象的键相同,则旧对象也将被替换。如果列表包含多个具有匹配键的对象,并且表是一个集合,则将插入一个对象,其中一个未定义。同样的情况也适用于ordered_set,但如果两个键比较相等,也会发生这种情况。

此外,您可能希望使用ets:insert_new,它不会覆盖。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18017346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档