zoukankan      html  css  js  c++  java
  • ets查询接口match、select说明

    ets:match/2
    用法:
    match(Tab, Pattern) -> [Match]
    返回和模式Pattern匹配的对象。
    一个匹配模式可能包含:绑定部分、'_'匹配任何Erlang项和匹配变量。

    示例

    1>ets:match(test, '$1'). %% 匹配Tab里所有变量
    [{1,2,3,4}, {5,6,7,8}]
    2>ets:match(test, {'_','_',3,'$1'}).
    [[4]]

    避免过多'_'通配符出现,可以使用记录record

    示例

    3>ets:match(test, #test{c=3,_='_',d='$1'}).
    [[4]]

    ps:如果要得到整个对象,可以使用ets:match_object/2。


    ets:select/2
    用法:
    select(Tab, MatchSpec) -> [Match]
    使用一个匹配描述match_spec匹配对象。该函数比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中的匹配模式一致,第二个元素是一个断言列表,可空,第三个元素是返回值描述。
    返回值结构为MatchHead所绑定的匹配变量,或者特殊的匹配值'$_'(整个匹配对象)和'$$(包含所有匹配值)'。

    示例

    4>ets:select(test, [{#test{c=3,_='_',a='$2',d='$1'}, [], ['$_']}]).
    [#test{a = 1,b = 2,c = 3,d = 4}]
    5>ets:select(test, [{#test{c=3,_='_',a='$1',d='$2'}, [], ['$$']}]).
    [[1,4]]
    6>ets:select(test, [{#test{c=3,_='_',a='$1',d='$2'}, [], ['$2']}]).
    [4]

    如果需要表达复杂的匹配条件,就需要使用Match specifications

    7> MS = ets:fun2ms(fun(#test{a=A, b=B}) when A > 1 -> B end).
    [{#test{a = '$1',b = '$2',c = '_',d = '_'},
    [{'>','$1',1}],
    ['$2']}]
    8> ets:select(test, MS).
    [6]
  • 相关阅读:
    bzoj 2763: [JLOI2011]飞行路线
    bzoj 2761: [JLOI2011]不重复数字
    bzoj 2744: [HEOI2012]朋友圈
    bzoj 2743: [HEOI2012]采花
    bzoj 2730: [HNOI2012]矿场搭建
    bzoj 2705: [SDOI2012]Longge的问题
    抗DDOS攻击
    kali安装后配置
    Kali更新源,亲测目前可用的源
    kali安装及配置ssr客户端
  • 原文地址:https://www.cnblogs.com/sunbin-hello/p/6476182.html
Copyright © 2011-2022 走看看