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结束。