high佬全 发表于 2015-1-30 02:41:14

ETS表的匹配操作

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

prettyIndex() ->
caseets: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,})
          true ->
               Fun(Ind),
                   prettyIndexNext(Next,{NextWord,})
      end
    end.   

页: [1]
查看完整版本: ETS表的匹配操作