这段时间我开始看关于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.
|