ets:select/2
对 ETS 表里的数据进行匹配比对
用法:
select(Tab, MatchSpec) -> [Match]
使用一个匹配描述从表 Tab 里匹配对象。此函数调用比 ets:match/2 和 ets:match_object/2 更常用。以下是一些最简单形式的匹配描述:
MatchSpec = [MatchFunction] MatchFunction = {MatchHead, [Guard], [Result]} MatchHead = "Pattern as in ets:match" Guard = {"Guardtest name", ...} Result = "Term construct"
这意味着匹配描述总是含有一个以上元组元素的列表(含有三个参数的元组元素),元组的第一个元素应是 ets:match/2 的文档中所描述的模式,第二个元素应是含 0 个或多个断言测试的列表,第三个元素应是包含关于实际返回值的描述的列表,通常是一个对返回值全描述的列表,即返回匹配对象的所有项目。
返回值的结构使用 MatchHead 所绑定的 "match variables",或者使用特殊的匹配值 '$_'(整个匹配对象)和 '$$'(包含所有匹配值的列表)。
Tab = ets:new(test_ets_new, [private]), ets:insert(Tab, [{a, 1}, {b, 2}]), ets:select(Tab, [{{'$1', '$2'}, [], ['$$']}]).
Tab = ets:new(test_ets_new, [private]), ets:insert(Tab, [{a, 1}, {b, 2}]), ets:select(Tab, [{{'$1', '$2'}, [], ['$_']}]).
Tab = ets:new(test_ets_new, [private]), ets:insert(Tab, [{a, 1}, {b, 2}]), ets:select(Tab, [{{'$1', '$2'}, [], ['$1']}]).
Tab = ets:new(test_ets_new, [private]), ets:insert(Tab, [{a, 1}, {b, 2}]), ets:select(Tab, [{{'$1', '$2'}, [], ['$2']}]).
Tab = ets:new(test_ets_new, [private]), ets:insert(Tab, [{a, 1}, {b, 2}]), ets:select(Tab, [{{'$1', '$2'}, [], ['$1', '$2']}]).