И для решения этой проблемы со спецификацией соответствия, если QLC оценивается как недостаточно эффективный.
> ets:fun2ms(fun ({_,X}=E) when X == a -> E end).
[{{'_','$1'},[{'==','$1',a}],['$_']}]
Ets: fun2ms - это преобразование синтаксического анализа, которое может преобразовывать некоторые развлечения в значения matchspec. Я использую его как быстрый способ получить нужную мне спецификацию. Мы получаем список со спецификацией совпадений, который находит кортеж, в котором вторым элементом является a. Мы можем повторить это для других ключей.
Итак, давайте заполним таблицу ets чем-нибудь, чтобы попробовать это, а затем создадим спецификацию соответствия, которая сопоставляет только элементы со вторым элементом как 'a' или 'c'. (Я вхожу в это
ets:new(foo, [named_table]).
ets:insert(foo, [{1,a},{2,b},{3,c},{4,d}]).
Vs = [a,c].
MS = [{{'_','$1'},[{'==','$1',V}],['$_']} || V <- Vs].
ets:select(foo, MS).
Когда я запускаю это, я получаю:
[{1,a},{3,c}]
person
Christian
schedule
26.05.2010