erlang ets表
一、表遍历
通过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表的更多相关文章
- Erlang ETS Table
不需要显示用锁,插入和查询时间不仅快而且控制为常量,这就是Erlang的ETS Table. 为什么而设计? Erlang中可以用List表达集合数据,但是如果数据量特别大的话在List中访问元素就会 ...
- Erlang ets -- something about cache
都说用ets 写一个cache 太简单, 那就简单的搞一个吧, 具体代码就不贴了, 就说说简要的需求和怎么做(说设计有点虚的慌). 需求场景 >> 查询系统,对于主存储而言,一次写入多次查 ...
- Erlang ets -- something about cache continue
上一次说到了实现一个简单cache 的基本思路和想法, http://www.cnblogs.com/--00/p/erlang_ets_something_about_cache.html 在文末, ...
- erl0010 - erlang查看ets 当前系统使用情况和当前配置上限
1.限制:erlang官网给出了ets的默认上限:“The default is 1400, can be changed with the environment variable ERL_MAX_ ...
- Erlang模块ets翻译
概要: 内置的存储 描述: 这个模块是Erlang内置存储BIFs的接口.这些提供了在Erlang运行时系统中存储大量数据的能力,并且能够对数据进行持续的访问时间.(在ordered_set的情况下, ...
- Erlang 初学者技巧及避免的陷阱
1. 传参或在匿名函数内慎用self() 通常在做消息传递或新建进程的时候我们需要将当前进程的Pid发给目标进程以便接收返回信息,但初学者不留意容易犯以下错误 spawn(fun() -> lo ...
- erlang 查看内存消耗的方法?
找出消耗内存最多的进程 : lists:reverse(lists:keysort(2,[{P, erlang:process_info(P, heap_size)} || P <- erlan ...
- erlang note
没有关于erlang interface ,继续寻找吧... --------------------------------------------------------------- erl - ...
- Erlang 程序引发共享内存 bug 的一个例子
虽然 Erlang 的广告说得非常好,functional.share-nothing.消息传递,blah blah 的,好像用 Erlang 写并发程序就高枕无忧了,但是由于 Erlang 信奉高度 ...
随机推荐
- 敏捷开发(八)- Scrum Sprint计划会议1
本文主要是为了检测你对SCRUM Sprint 计划会议的了解和使用程度, 通过本文你可以检测一下 1.你们的SCRUM Sprint 计划会议的过程和步骤 2.会议的输出结果 S ...
- 数据库中Schema、Database、User、Table的关系[转]
数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问 ...
- mysql 时间类型分类
MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围------------ ---- ...
- 用 monitorix 开启linux图形化监控
# yum install monitorix # service monitorix starthttp://host:8080/monitorix/
- 一个快速、高效的Levenshtein算法实现——代码实现
在网上看到一篇博客讲解Levenshtein的计算,大部分内容都挺好的,只是在一些细节上不够好,看了很长时间才明白.我对其中的算法描述做了一个简单的修改.原文的链接是:一个快速.高效的Levensht ...
- underScore学习1:匿名函数中call(this)的作用
匿名函数中(function(){}).call(this) 中的.call(this) 有什么用? 我们都知道,.call()可以改变函数执行时的context,即this的指向,源码中的.call ...
- Myeclipse2014中,新建部署Maven项目
一.环境 1.1 myeclipse2014 1.2 maven3.2.1 1.3 jdk1.7 上述环境配置可参照我之前编写的maven搭建方面的文档.本文着重介绍myeclipse2014下mav ...
- turn to help
1 'On The Exact Recovery Condition of Simultaneous Orthogonal Matching Pursuit', JF Determe,J Louvea ...
- L2-002. 链表去重
L2-002. 链表去重 题目链接:https://www.patest.cn/contests/gplt/L2-002 这题因为结点地址只有四位数,所以可以直接开一个10000的数组模拟内存就好了. ...
- linux下如何使用vnstat查看服务器带宽流量统计
因为很多vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量. vnstat就是一个很好用的服务器流量统计命令.我截几 ...