Erlang 联合ETS表格

Erlang 联合ETS表格,erlang,ets,Erlang,Ets,我尝试将两个ETS表合并为一个ETS表。 我知道的唯一方法是创建第三个表,并将两个表的记录插入第三个表中。 有更好的方法吗?允许元组列表。另一方面,将ets表导出为元组列表。这意味着您可以轻松地将一个ets表导入另一个ets表 不完全是一个并集,但您最终得到一个包含前两个并集的表,而不创建第三个ets表,这似乎是您试图实现的 举个小例子: ets:new(list_a,[named_table]). ets:new(list_b,[named_table]). ets:insert(list_

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

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

不完全是一个并集,但您最终得到一个包含前两个并集的表,而不创建第三个ets表,这似乎是您试图实现的

举个小例子:

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表的类型():

如果表是一个集合,并且插入对象的键与 表中任何对象的键,旧对象将被替换。如果 该表是一个有序的集合,是插入对象的键 与表中任何对象(旧对象)的键进行比较 也被替换了。如果列表包含多个具有 匹配键和表是一组,将插入一个,哪一个 没有定义。这同样适用于有序集合,但也会 如果键比较相等,则会发生此情况


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

谢谢,但没有其他方法(在概念插入表项方面)来创建第三个表。我处理的是包含几百兆字节的表。所以这条路不适合我。我需要一种复制整个表区域的方法。也可以在第一个ETS表上迭代,在另一个ETS表中写入每条记录(您可以使用first&next函数或简单的折叠)。