Erlang 如何使用辅助键查找ets表
我有一个具有以下属性的表:Erlang 如何使用辅助键查找ets表,erlang,mnesia,erlang-shell,ets,Erlang,Mnesia,Erlang Shell,Ets,我有一个具有以下属性的表: SortCode Index Created SortCode是主键,Index是辅助键。给定一个索引值,如何获取关联的排序码值 我试过ets:lookup/3,但它只需要一个主键。在ets中没有辅助索引。你可以做: 使用ets:match或ets:select或 使您拥有反向索引ets表格或 使用mnesia并添加(次要)索引 此外,海内克-皮奇-维乔迪尔(Hynek-Pichi-Vychodil)还说 在ets中,没有解决方案可以使用密钥之外的其他属性获取
SortCode Index Created
SortCode
是主键,Index
是辅助键。给定一个索引
值,如何获取关联的排序码
值
我试过
ets:lookup/3
,但它只需要一个主键。在ets
中没有辅助索引。你可以做:
ets:match
或ets:select
或ets
表格或mnesia
并添加(次要)索引此外,海内克-皮奇-维乔迪尔(Hynek-Pichi-Vychodil)还说 在ets中,没有解决方案可以使用密钥之外的其他属性获取记录。可以使用
mnesia:dirty\u index\u read()
完成此操作
如果您只想使用ets,则可以按照上述建议或以下代码进行操作。假设您的记录模式是这样的:{“一”,1,“27092015”}
键为“1”,但必须使用1获取
FilterSuspCodeFun = fun ({_,I,_}) when I == 1 -> true ; (_) -> false end,
ListData = ets:tab2list(susp_code),
{SortCode,_,created}= lists:filter(FilterSuspCodeFun,ListData),
您应该包含代码,以便我们可以看到您将什么作为值放入表中。无论采用哪种方法,都可以查看。您可以使用ets:match/2或ets:select/2查找具有索引值的表项,但这将导致读取表中的每个项,这将大大降低ets:lookup/2的效率。您可以使用mnesia实现您的表,在其中您可以在一个表中维护多个索引,并使用mnesia:index\u read/3高效地查找二级索引。如何执行
ets:select(suspe\u code,[{{{'''u',1','.},[''$},['$']})是一种非常低效的方法。
您可以使用ets:fun2ms(fun({uu,1,})生成匹配规范=R)->R结束。