Если у вас есть следующее:
1> ets:new(people, [set, named_table]).
2> ets:insert(people, {silvio, italy, joker}).
3> ets:insert(people, {roberto, italy, employee}).
(Обратите внимание, я добавляю общий кортеж к столу - запись просто кортеж, где первый элемент является именем записи себя и у вас есть некоторые синтаксический сахар, чтобы получить доступ к записям элементы -)
Вы можете сделать следующее сопоставляют операцию:
4> ets:match(people, {'$1', 'italy', '_'}).
Что означает:
Сопоставьте все записи из трех столбцов, где вторым элементом является атом «Италия». Отбросьте третий аргумент, так как меня интересует только первый.
Это возвращение:
[[silvio],[roberto]]
В качестве альтернативы, вы можете выполнить следующее 'выбрать' операцию:
5> ets:select(people, [{{'$1', '$2', '$3'},
[{'==', '$2', italy}],
[['$3']]}]).
Что означает:
Выберите все записи из трех «столбцов», где второй элемент равен «италия», возвращая только третий элемент.
В вашем случае, что бы вернуть:
[[joker],[employee]]
Bare в виду, что матч операций, чтобы быть действительно эффективными, были реализованы как BIFS, так что они будут останавливать другие процессы во время выполнения. Это означает, что для большой таблицы вы должны посмотреть другие механизмы, такие как «traversing an ETS table».
Надеюсь, это поможет.
Элементы таблицы ets не являются строгими записями, но кортежи размером больше 1. Таким образом, вы можете получить доступ к [определенным элементам поиска] (http://erldocs.com/R14B02/stdlib/ets.html?i=2&search = # lookup_element/3) если хотите. – Keynslug