Erlang之ETS学习02

常见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
  1. 如果表的类型是 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
  1. 如果表的类型是 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>
  1. 如果表里没有键为 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值