Erlang中文论坛

标题: ETS表的匹配操作 [打印本页]

作者: high佬全    时间: 2015-1-30 02:41
标题: ETS表的匹配操作
  这段时间我开始看关于ets表的东西,看到了关于匹配方面一个亮点。一般ets:match给我们提供了一个快捷方便的方式来匹配表中的数据,但是
这应该是我们慎用的,因为它会改变系统的实时行为,它是内置函数(原子性)。
因此,在一个巨大的表中匹配操作会阻碍其他进程的执行,直到完成整个表的
遍历。而为了避免这个问题最好使用first和next。如:

prettyIndex() ->
case  ets:first(tab)  of
    '$end_of_table' ->
      ok;
    First ->
        case First of
           {W,N} ->
               Ind = {Word,N}
        end,
    prettyIndexNext(First,Ind)%处理函数
end.

prettyIndexNext(First,{Word,Lines} = Ind) ->
Next = ets:next(tab,First) ,
  case Next of
     '$end_of_table' ->
        Fun(Ind);  %收集等特的key,记录出现在N行出现  2.把重复行去掉
     {NextWord,M} ->
        if
          NextWord == Word ->
               NextWord == Word ->
                  prettyIndexNext(Next,{NextWord,[M|Lines]})
          true ->
               Fun(Ind),
                   prettyIndexNext(Next,{NextWord,[M]})
        end
    end.     






欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/) Powered by Discuz! X3.3