不同的ETS(Erlang Term Storage)表类型之间有以下区别:
ets:new/2
函数创建一个有序集合表。Table = ets:new(my_table, [ordered_set]).
ets:new/2
函数创建一个集合表。Table = ets:new(my_table, [set]).
ets:new/2
函数创建一个无序的重复集合表。Table = ets:new(my_table, [bag]).
ets:new/2
函数创建一个有序的重复集合表。Table = ets:new(my_table, [duplicate_bag]).
ordered_set(有序集合)和set(集合)类型的表在插入和查找操作上性能较高,但在删除操作上性能较差。而bag(无序的重复集合)和duplicate_bag(有序的重复集合)类型的表在删除操作上性能较高,但在插入和查找操作上性能较差。
ordered_set(有序集合)和duplicate_bag(有序的重复集合)类型的表可以使用ets:select/2
函数进行范围查询,而set(集合)和bag(无序的重复集合)类型的表不支持范围查询。
下面是一个使用ETS表的示例代码:
-module(ets_example).
-export([start/0]).
start() ->
Table = ets:new(my_table, [set]),
ets:insert(Table, {1, "John"}),
ets:insert(Table, {2, "Alice"}),
ets:insert(Table, {3, "Bob"}),
ets:insert(Table, {4, "Lisa"}),
Result = ets:lookup(Table, 2),
io:format("Result: ~p~n", [Result]).
在上述示例中,我们创建了一个set类型的ETS表,并向表中插入了一些键值对。然后,我们使用ets:lookup/2
函数查找键为2的值,并将结果打印出来。