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.pswp.cn/news/384188.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384188.shtml
英文地址,請注明出處:http://en.pswp.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…