一、表遍历

通过ets:first/1获取表的第一个关键字,表中下一个关键字用ets:next/2得到,直到ets:next/2返回'$end_of_table'

当多几个进程并发访问ets表时,可以使用ets:safe_fixtable/2函数来保证,每个元素只被访问一次。

-module(traversal_ets).
-export([traversal_ets/1]).

traversal_ets(Tab) ->
    traversal_ets(Tab, ets:first(Tab), []).
traversal_ets(_,'$end_of_table',Acc) ->
    Acc;    
traversal_ets(Tab, Prv, Acc) ->
    traversal_ets(Tab, ets:next(Tab,Prv), [Prv|Acc]).

二、提取表信息,匹配match和match_object
24> ets:new(countries, [bag,named_table]).
countries
25> ets:insert(countries,{yves,france,cook}).
true
26> ets:insert(countries,{marcoitaly,cook}).
true
27> ets:insert(countries,{sean,ireland,bartender}).
true
28> ets:insert(countries,{chris,ireland,tester}).
true

1、match指定匹配输出

9> ets:match(countries,{'$1',ireland,'_'}).
[[sean],[chris]]
10> ets:match(countries,{'$1','$0',cook}).  
[[italy,marco],[france,yves]]
11> ets:match(countries,{'$2',ireland,'_'}).
[[sean],[chris]]
12> ets:match(countries,{'$2',cook,'_'}).   
[]
2、matc_object全部匹配模式元祖

13> ets:match_object(countries,{'_',ireland,'_'}).
[{sean,ireland,bartender},{chris,ireland,tester}]

3、match_delete 删除匹配输出
14> NewTab = ets:match_delete(countries,{'_',ireland,'_'}).
true

三、提取表信息筛选

ets:select

1、用匹配规约做参数

ets:select(countries,[{{'$1','$2','$3'},[{'/=','$3',cook}],[['$2','$1']]}]).

{'$1','$2','$3'} 模式

{'/=','$3',cook}保护元

['$2','$1'] 返回表达式

2、用ets:fun2ms返回匹配规约

30> MS = ets:fun2ms(fun({Name, Country,Job}) when Job /= cook ->
30> [Country,Name] end).
[{{'$1','$2','$3'},[{'/=','$3',cook}],[['$2','$1']]}]
31> ets:select(countries, MS).
[[ireland,sean],[ireland,chris]]

erlang ets表的更多相关文章

  1. Erlang ETS Table

    不需要显示用锁,插入和查询时间不仅快而且控制为常量,这就是Erlang的ETS Table. 为什么而设计? Erlang中可以用List表达集合数据,但是如果数据量特别大的话在List中访问元素就会 ...

  2. Erlang ets -- something about cache

    都说用ets 写一个cache 太简单, 那就简单的搞一个吧, 具体代码就不贴了, 就说说简要的需求和怎么做(说设计有点虚的慌). 需求场景 >> 查询系统,对于主存储而言,一次写入多次查 ...

  3. Erlang ets -- something about cache continue

    上一次说到了实现一个简单cache 的基本思路和想法, http://www.cnblogs.com/--00/p/erlang_ets_something_about_cache.html 在文末, ...

  4. erl0010 - erlang查看ets 当前系统使用情况和当前配置上限

    1.限制:erlang官网给出了ets的默认上限:“The default is 1400, can be changed with the environment variable ERL_MAX_ ...

  5. Erlang模块ets翻译

    概要: 内置的存储 描述: 这个模块是Erlang内置存储BIFs的接口.这些提供了在Erlang运行时系统中存储大量数据的能力,并且能够对数据进行持续的访问时间.(在ordered_set的情况下, ...

  6. Erlang 初学者技巧及避免的陷阱

    1. 传参或在匿名函数内慎用self() 通常在做消息传递或新建进程的时候我们需要将当前进程的Pid发给目标进程以便接收返回信息,但初学者不留意容易犯以下错误 spawn(fun() -> lo ...

  7. erlang 查看内存消耗的方法?

    找出消耗内存最多的进程 : lists:reverse(lists:keysort(2,[{P, erlang:process_info(P, heap_size)} || P <- erlan ...

  8. erlang note

    没有关于erlang interface ,继续寻找吧... --------------------------------------------------------------- erl - ...

  9. Erlang 程序引发共享内存 bug 的一个例子

    虽然 Erlang 的广告说得非常好,functional.share-nothing.消息传递,blah blah 的,好像用 Erlang 写并发程序就高枕无忧了,但是由于 Erlang 信奉高度 ...

随机推荐

  1. 敏捷开发(八)- Scrum Sprint计划会议1

    本文主要是为了检测你对SCRUM Sprint 计划会议的了解和使用程度, 通过本文你可以检测一下     1.你们的SCRUM Sprint 计划会议的过程和步骤    2.会议的输出结果    S ...

  2. 数据库中Schema、Database、User、Table的关系[转]

    数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问 ...

  3. mysql 时间类型分类

    MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围------------ ---- ...

  4. 用 monitorix 开启linux图形化监控

    # yum install monitorix # service monitorix starthttp://host:8080/monitorix/

  5. 一个快速、高效的Levenshtein算法实现——代码实现

    在网上看到一篇博客讲解Levenshtein的计算,大部分内容都挺好的,只是在一些细节上不够好,看了很长时间才明白.我对其中的算法描述做了一个简单的修改.原文的链接是:一个快速.高效的Levensht ...

  6. underScore学习1:匿名函数中call(this)的作用

    匿名函数中(function(){}).call(this) 中的.call(this) 有什么用? 我们都知道,.call()可以改变函数执行时的context,即this的指向,源码中的.call ...

  7. Myeclipse2014中,新建部署Maven项目

    一.环境 1.1 myeclipse2014 1.2 maven3.2.1 1.3 jdk1.7 上述环境配置可参照我之前编写的maven搭建方面的文档.本文着重介绍myeclipse2014下mav ...

  8. turn to help

    1 'On The Exact Recovery Condition of Simultaneous Orthogonal Matching Pursuit', JF Determe,J Louvea ...

  9. L2-002. 链表去重

    L2-002. 链表去重 题目链接:https://www.patest.cn/contests/gplt/L2-002 这题因为结点地址只有四位数,所以可以直接开一个10000的数组模拟内存就好了. ...

  10. linux下如何使用vnstat查看服务器带宽流量统计

    因为很多vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量. vnstat就是一个很好用的服务器流量统计命令.我截几 ...