常见api的使用
- ets:new(Name,OptionList)
第一个参数Name是一个原子,OptionList是一个参数列表可指定创建表的多个属性,其中{keypos, K}可以指定键的位置,named_table使得Name就可以被用于后续的表操作,以及上一篇文章提到的表的类型(set |ordered_set | bag | duplicate_bag),和访问权限(public |protected |private)等.
named_table参数效果
ets:new(test_table,[set,named_table,{keypos,2}]).
test_table
19> ets:insert(test_table,{1,2,3}).
true
%% 不添加named_table参数时返回的是tableId而不是一个原子类型的表名
20> ets:new(test_table,[set,{keypos,2}]).
#Ref<0.4148664931.3250978817.252332>
{}keypos,N}参数的效果
%% 指定键的位置为第二个
31> ets:new(new_table,[set,named_table,{keypos,2}]).
new_table
32> ets:insert(new_table,{1,2,3}).
true
33> ets:lookup(new_table,1).
[]
34> ets:lookup(new_table,2).
[{1,2,3}]
35> ets:lookup(new_table,3).
[]
%% 指定键的位置为第一个
36> ets:new(new_table01,[set,named_table,{keypos,1}]).
new_table01
37> ets:insert(new_table01,{1,2,3}).
true
38> ets:lookup(new_table01,1).
[{1,2,3}]
39> ets:lookup(new_table01,2).
[]
40> ets:lookup(new_table01,3).
[]
41>
- ets:all()
返回当前节点里所有的 ETS 表,如果表有命名,则返回表的名字,否则返回表的标识符。
41> ets:all().
[ac_tab,#Ref<0.4148664931.3250978817.252086>,
#Ref<0.4148664931.3250978817.252087>,global_locks,
global_names,global_names_ext,global_pid_names,
global_pid_ids,inet_db,inet_cache,inet_hosts_byname,
inet_hosts_byaddr,inet_hosts_file_byname,
inet_hosts_file_byaddr,file_io_servers,
#Ref<0.4148664931.3250978817.252177>,new_table,new_table01]
42>
- ets:foldl(Function, Acc0, Tab) -> Acc1
与lists:foldl用法一样
42> ets:new(test_foldl,[set,named_table,{keypos,1}]).
test_foldl
43> ets:insert(test_foldl,{1,a}).
true
44> ets:insert(test_foldl,{1,b}).
true
45> ets:insert(test_foldl,{1,c}).
true
46> ets:insert(test_foldl,{2,c}).
true
47> ets:insert(test_foldl,{3,d}).
true
48> ets:insert(test_foldl,{4,e}).
true
49> ets:foldl(fun({Key,Value},Acc)->[Value|Acc] end,[],test_foldl).
[c,d,e,c]
- ets:i(Tab) ->
ok
在输出端上打印显示指定 ETS 表 Tab 的信息
51> ets:info(test_foldl).
[{read_concurrency,false},
{write_concurrency,false},
{compressed,false},
{memory,332},
{owner,<0.98.0>},
{heir,none},
{name,test_foldl},
{size,4},
{node,nonode@nohost},
{named_table,true},
{type,set},
{keypos,1},
{protection,protected}]
- ets:tab2list(Tab) -> [Object]
- 返回一个 ETS 表的所有对象数据的列表
52> ets:tab2list(test_foldl).
[{1,c},{3,d},{4,e},{2,c}]
53>
- ets:lookup_element(Tab, Key, Pos) -> Elem
- 如果表的类型是 set 或 ordered_set,那么该函数将返回键为 Key 的对象的第 Pos 个元素。
53> ets:new(test_ets_new, [set, named_table]),
ets:insert(test_ets_new, [{a, 1}, {b, 2}]),
ets:lookup_element(test_ets_new, a, 2).
1
54> ets:lookup_element(test_ets_new, a, 1).
a
- 如果表的类型是 bag 或 duplicate_bag,那么该函数将返回键为 Key 的对象的第 Pos 个元素的列表。
71> ets:new(test_ets_new, [duplicate_bag, named_table]).
test_ets_new
72> ets:insert(test_ets_new, [{a, 1,2,3,4,5}, {b, 5,4,3,2,1}]),
ets:insert(test_ets_new, [{a, 1,2,3,4,5}, {b, 5,4,3,2,1}]).
true
73> ets:lookup_element(test_ets_new, a, 1).
[a,a]
74> ets:lookup_element(test_ets_new, a, 2).
[1,1]
75> ets:lookup_element(test_ets_new, a, 3).
[2,2]
76> ets:lookup_element(test_ets_new, a, 3).
[2,2]
77> ets:lookup_element(test_ets_new, a, 4).
[3,3]
78> ets:insert(test_ets_new, [{a, 6,7,8,9,10}, {b, 10,9,8,7,6}]).
true
79> ets:lookup_element(test_ets_new, a, 4).
[3,3,8]
80> ets:lookup_element(test_ets_new, a, 3).
[2,2,7]
81>
- 如果表里没有键为 Key 的对象,函数将以 badarg 的原因退出。
71> ets:new(test_ets_new, [duplicate_bag, named_table]).
test_ets_new
72> ets:insert(test_ets_new, [{a, 1,2,3,4,5}, {b, 5,4,3,2,1}]).
73> ets:lookup_element(test_ets_new, c, 3).
** exception error: bad argument
in function ets:lookup_element/3
called as ets:lookup_element(test_ets_new,c,3)
* ets:safe_fixtable(Tab, Fix) -> true