Erlang / Erlang Advanced Interview questions
What is the difference between ets:match, ets:select, and ets:foldl?
All three read multiple rows out of an ETS table, but they differ in expressiveness and performance characteristics.
| ets:match | ets:select | ets:foldl |
Simple pattern with '_' wildcards; returns matching bound variables. |
Full match specifications: pattern + guard conditions + result shape, compiled for speed. | Walks every row via a fold function; no filtering pushed into the table lookup. |
| Easiest to write, least flexible. | Most flexible and fastest for selective queries; harder to write by hand. | Simplest mental model, but always scans the whole table. |
ets:select(Tab, [{{'$1', '$2'}, [{'>', '$2', 10}], ['$1']}]). %% equivalent to: select keys where value > 10
As a rule: use match for a quick one-off lookup, select when you need conditions
beyond simple equality and want the table engine itself to filter efficiently, and foldl when
you genuinely need to process every row (e.g. computing an aggregate).
More Related questions...