设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18935|回复: 0
打印 上一主题 下一主题

ETS表的匹配操作

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-30 02:41:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  这段时间我开始看关于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.     

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-11-21 21:29 , Processed in 0.149091 second(s), 9 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表