ets

  :ets.new(table_name, pattern)

  第一个参数是表名,第二个参数是表的设置选项。

  :set  一个key,一个数据,无序

  :ordered_set  一个key,一个数据,有序; 1 == 1.0

  :bag  一个key,多个数据, 不可重复

  :duplicate_bag  一个key,多个数据,可重复

 

  :public  任何进程可读写

  :protect  拥有者进程可读写,其他进程可读

  :private  只有拥有者可读写

 

  :named_table  为ets表命名,替代它的id。有该参数时 :ets.new 返回 named_table 对应的表名,使用 insert 等函数时使用。注:在使用 named_table 的情况下同一项目中不能出现 :est.new 相同的表

 

  :ets.insert(table_name, object)  如果当前键已存在,则覆盖

    table_id = :ets.new(:test1, [:set, :public]):ets.insert(table_id, {1, ["2", "xx"]}):ets.insert(table_id, {[3, 4], [13, 98, 97]})

   

  :ets.insert(table_name, object)  如果当前键已存在,则返回false

 

  :ets.match(table_name, pattern)

  我们使用原子 :"$1":"$2":"$3" 等等来表示匹配中所使用的变量。其中的数字只用来表示其在返回值中的位置,而非匹配时的位置。不想要的部分我们可以用 :"_" 来忽略掉。

:ets.match(table_id, {1, :'$1'})    ["2", "xxx"]
:ets.match(table_id, {[3, :'$2'], :'$1'})    [[13, 98, 97, 4]]

  

  :ets.match_object(table_name, pattern)

   match_object/2,这个函数忽略那些变量而直接返回整个对象

  :ets.match(table_id, {[3, :'$2'], :'$1'})    [{[3, 4}, [13, 98, 97]}]

  

  :ets.tab2list(table_name)

  返回一个 ETS 表的所有对象数据的列表

 

  :ets.select(table_name, match_spec)  :ets.fun2ms(fun)

  这两个函数通常联用, :ets.fun2ms 返回一组用于 :ets.select 匹配的模式

 

  :ets.lookup(table_name,  key)

  返回key对应的对象

 

  :ets.first(table_name)

  返回第一个元素的键

 

  :ets.next(table_name, key)

  返回当前键的下一个键

   

  :ets.delete_match(table_name, pattern) 

  删除匹配成功的数据

 

  :ets.delete(table)

  删除整张表

 

  :ets.delete(table, key)

  删除key指向的一组数据

 

  :ets.safe_fixtable(table, true/false)

  锁定表使其可以安全遍历,锁定一个类型是 set,bag 或 duplicate_bag 的表,使其可以安全遍历表里的数据。在一个进程里调用 ets:safe_fixtable(Tab, true) 可以锁定一个表,直到在进程里调用 ets:safe_fixtable(Tab, false) 才会解锁,或进程崩溃。如果同时有几个进程锁定一个表,那么表会一直保持锁定状态,直到所有进程都释放它(或崩溃)。有一个引用计数器记录着每个进程的操作,有 N 个持续的锁定操作必须有 N 个释放操作,表才会真正被释放。当一个表被锁定,一序列的 ets:first/1 和 ets:next/2 的调用都会保证成功执行,并且表里的每一个对象数据只返回一次,即使在遍历的过程中,对象数据被删除或插入。在遍历过程中插入到表里的新数据可能由 ets:next/2 返回(这取决有键的内部顺序)。

  一个被锁定的表是不会有被删除的对象数据从表里被实际删除,直到它被释放。如果一个进程锁定一个表,并不释放它,那些已删除的对象数据所占用的内存将永远不会得到释放。对表操作的性能也会显著降低。

转载于:https://www.cnblogs.com/lr1402585172/p/11583651.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法-区间选点问题-种树

【题目描述】一条街道的一边有几座房子。因为环保原因居民想要在路边种些树,路边的地区被分割成n块,并被编号为1~n。每块大小为一个单位尺寸且最多可总一棵树。每个居民想在门前种些树并制定了三个数b,e,t,这三个数代表居民想在b和e之间最少种…

ets注意事项

当表类型为 :set 时,使用 :ets.first 和 :ets.last 会获取到同一个 key。将表类型换为 :oedered_set 就可以避免这种情况 转载于:https://www.cnblogs.com/lr1402585172/p/11599219.html

CodeForces - 1141CPolycarp Restores Permutation搜索+剪枝

Polycarp Restores Permutation 【题意分析】题意大概是给定一个串,包含从1到n所有的数字。但是给定的是相邻数字的差,需要复原这个串。 大概分析以后发现给定的是一个差分数组,所以只需要枚举第一个元素就可以确定所有元素的值。 问题是如何…

CodeForces - 1141ESuperhero Battle简单模拟

Superhero Battle 这道题卡了我一个多小时,最后也没有做出来,成功称为吊车尾。。。 思路什么的都没有问题,主要是,爆long long了,这个太可怕了,就因为一个中间变量忘记开longlong导致一直一直wa&#xff0c…

Linux下的I/O复用与epoll详解

http://www.cnblogs.com/lojunren/p/3856290.html 前言 I/O多路复用有很多种实现。在linux上,2.4内核前主要是select和poll,自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术。尽管他们的使用方法不尽相…

校门外的树——树状数组+区间修改

校门外的树 【题目分析】题目描述的是一种区间修改,看起来好像要用线段树。但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的。毕竟树状数组更加简单。 我们的关注点应该放在区间的端点处,然后通过统…

数据结构--顺序栈和链式栈

http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元&#xf…

CodeForces - 1144F搜索+简单图论

【题目链接】Graph Without Long Directed Paths 【题目分析】题目想要讲一个无向图变成一个最长路径不超过1的有向图。假如某个边是从u到v的,那么所有和v相连的都必须是指向v的,所有和u相连的都必须是从u开始的。相当于涂色,相连的节点应该涂…

数据结构--双链表的创建和操作

http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一、双向链表的定义 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以&#xff0c…

CodeForces - 1152B二进制+思维

【题目链接】Neko Performs Cat Furrier Transform 【题目分析】要求将一个数字变成2n-1,通过尝试我们发现如果将最低位的全零位和对应的全一数字(例如11000对应的就是111)异或那么数字就会变成想要的结果(11111) 但是如果前面还有…

C语言文件操作之fgets()

http://blog.csdn.net/daiyutage/article/details/8540932 来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数: s: 字符型指针,指向存储读入数据的缓冲区的地址。 n: 从流中读入n-1个字符 stream : 指向读取…

指针与零的比较以及浮点型与零的比较

指针和零的比较 int *p null;if(p ! null){p 20; } 整形和零的比较 int i 0; if(0i) {... } 浮点型和零的比较 判断一个浮点数是不是零 #define EXP 0.0000000000001 float f 0.00001; if((f > -EXP)&&(f < EXP)) {... } 扩展后 判断一个浮点数是不…

CodeForces 1138B暴力+剪枝

【题目链接】Circus 【题目分析】理解题意以后发现并没有什么思路&#xff0c;没有什么算法能用&#xff0c;这个时候就应该想到计算机解题的本质——暴力求解。相应的就要想到剪枝的条件&#xff0c;肯定不能盲目的暴力求解。 总共有四种人&#xff1a;00,01,10,11&#xff0c…

MYSQL错误代码#1045 Access denied for user 'root'@'localhost'

http://blog.csdn.net/lykezhan/article/details/70880845 遇到MYSQL“错误代码#1045 Access denied for user rootlocalhost (using password:YES)” 需要重置root账号权限密码&#xff0c;这个一般还真不好解决。 不过&#xff0c;这几天调试的时候真的遇到了这种问题&#x…

C语言操作符

移位表达式 左移操作符<< 左边抛弃,右边补零 右移操作符>> 1.逻辑右移 左边补零,右边丢弃 2.算数右移 左边补符号位,右边丢弃 注意: 1.左移一位相当于乘2,右移一位相当于除2,并且在内存中存放的是二进制的补码,且移位操作符只对int型数操作 2.移位操作符不要移动…

棋盘问题——DFS

【题目描述】 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放k个棋子的所有可行的摆放方…

linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql

http://www.jb51.net/article/46139.htm 1. MySQL的安装与配置&#xff1a; 在Ubuntu下安装MySQL方法很简单&#xff0c;使用如下命令&#xff1a; 复制代码 代码如下:sudo apt-get install mysql-server安装的过程中系统会提示设置root密码&#xff0c;此过程可以跳过&#…

常量变量以及循环

常量 1.三目运算词 三字母词表达字符???([??)]??<{??>} 2.循环 1).数组元素以及变量在内存中的分配顺序 2)goto语句应用 //电脑关机程序 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int ma…

Dungeon Master——BFS

【题目描述】 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You cannot move …

Linux 环境 C语言 操作MySql 的接口范例

http://www.cnblogs.com/wunaozai/p/3876134.html 接上一小节&#xff0c;本来是计划这一节用来讲数据库的增删改查&#xff0c;但是在实现的过程中&#xff0c;出现了一点小问题&#xff0c;也不是技术的问题&#xff0c;就是在字符界面上比较不好操作。比如要注册一个帐号&a…