Если у вас есть следующее:
1> ets:new(people, [set, named_table]).
2> ets:insert(people, {silvio, italy, joker}).
3> ets:insert(people, {roberto, italy, employee}).
(Обратите внимание, что я добавляю универсальный кортеж в таблицу - запись - это просто кортеж, где первый элемент - это имя самой записи, и у вас есть некоторый синтаксический сахар для доступа к элементам записей -)
Вы можете выполнить следующую операцию 'match':
4> ets:match(people, {'$1', 'italy', '_'}).
Что означает:
Сопоставить все записи, состоящие из трех столбцов, где вторым элементом является атом «Италия». Откажитесь от третьего аргумента, так как меня интересует только первый.
Это вернет:
[[silvio],[roberto]]
В качестве альтернативы, вы можете выполнить следующую операцию «выбор»:
5> ets:select(people, [{{'$1', '$2', '$3'},
[{'==', '$2', italy}],
[['$3']]}]).
Что означает:
Выберите для всех записей, сделанных из трех «столбцов», где второй элемент равен «Италии», возвращая только третий элемент.
В вашем случае это вернет:
[[joker],[employee]]
Имейте в виду, что операции сопоставления, чтобы быть действительно эффективными, были реализованы как BIF, поэтому они будут останавливать другие процессы при выполнении. Это означает, что для большой таблицы вы должны рассмотреть другие механизмы, такие как « обход таблицы ETS ».
Надеюсь, это поможет.