我有一個表具有以下屬性做一個ETS表查找:如何利用第二密鑰
SortCode Index Created
SortCode
是主鍵和Index
是次要的關鍵。給定Index
的值,我如何獲得關聯的SortCode
值?我試過ets:lookup/3
,但它只需要一個主鍵。
我有一個表具有以下屬性做一個ETS表查找:如何利用第二密鑰
SortCode Index Created
SortCode
是主鍵和Index
是次要的關鍵。給定Index
的值,我如何獲得關聯的SortCode
值?我試過ets:lookup/3
,但它只需要一個主鍵。
在ets
中沒有這樣的東西作爲二級索引。使用ets:match
或ets:select
或
ets
表或mnesia
添加了(二級)指數
添加到Hynek -Pichi- Vychodil所說的內容。
在ets中沒有解決方案使用除鍵之外的其他屬性來獲取記錄。它可以使用mnesia:dirty_index_read()
完成。
如果您只想使用ets,那麼您可以按照上述建議或下面的代碼進行操作。假設你的記錄模式omething像:{"one",1,"27092015"}
重點是「一」,但你必須使用1
FilterSuspCodeFun = fun ({_,I,_}) when I == 1 -> true ; (_) -> false end,
ListData = ets:tab2list(susp_code),
{SortCode,_,created}= lists:filter(FilterSuspCodeFun,ListData),
如何做'ets:select(susp_code,[{{'_',1,'_'},[],['$ _']}])是非常低效的方法''您可以使用'ets:fun2ms(fun({_,1,_} = R) - > R end).' –
你應該包括代碼,所以我們可以看到你把東西到表的值來獲取。無論哪種方式,請查看['ets:match'函數](http://www.erlang.org/doc/man/ets.html#match-2)。 –
您可以使用ets:match/2或ets:select/2來查找帶有索引值的表項,但會導致正在讀取的表的每個條目的效率遠低於ets:lookup/2。 您可以用mnesia實現您的表,您可以在表中維護多個索引,並使用mnesia:index_read/3高效查找二級索引。 –