記錄record:
是元組的另一種形式
-record(name, ).
記錄比較像c++的結構和類。
.hrl有點想c++的.h檔案
test.hrl
-record(todo, ).
定義乙個叫做todo的記錄。指定了預設值。
31> rr("test.hrl").
[todo]
在shell裡面讀入記錄的定義。rr()是read records的縮寫。
32> #todo{}. %建立乙個todo物件
#todo
33> x1 = #todo.%建立乙個to物件
#todo
34> x2 = x1#todo.%建立乙個to物件,使用x1來複製
#todo
提取字段,採用模式匹配的方式,或者單個字段訪問
37> #todo = x2.
#todo
38> w.
joe39> txt.
"fix errata in book"
40> x2#todo.text.
"fix errata in book"
函式裡模式匹配記錄
f(#todo = r)->
r#todo%整個記錄進行操作
s = finished%單個字段操作
do_something(x) when is_record(x, todo) ->%匹配特定型別的記錄
...
對映組map
跟c++的map差不多。
建立乙個對映組:
a = #.
b = a#.
表示式k => val1有兩種用途,一種是現有鍵k的值更新為新值v,另一種是給對映組新增乙個全新的k-v對。
表示式k:=v的作用是將現有的鍵k的值更新為新值v。而且,這個方式效率高,一般優先使用這個。
對映組的內建函式
maps:new()->#{} 返回乙個空對映組。
erlang:is_map(m)->bool() 如果m是對映組就返回true,否則返回false。
maps:to_list(m)->[,...,]
把對映組m裡的所有鍵和值轉換成為乙個鍵值列表。
maps:from_list([,...,])->m 把乙個包含鍵值對的列表轉換成對映組。
maps:map_size(map)->numberofentries 返回對映組的條目數量
maps:is_key(key,map)->bool() 如果對映組包含乙個鍵為key的項就返回true,否則返回false。
maps:get(key,map)->val 返回對映組裡與key關聯的值,否則丟擲乙個異常錯誤。
maps:find(key,map)->|error 返回應這組裡與key關聯的值,否則返回error。
maps:keys(map)->[key1,...,keyn] 返回對映組包含的鍵列表,按公升序排列。
maps:remove(key,m)->m1 返回乙個新對映組m1,移除了key。
maps:without([key1,...,keyn],m)->m1 返回乙個新的對映組m1,移除了[key1,...,keyn]列表的元素。
maps:difference(m1, m2)->m3 m3是m1的複製,移除了m2。
對映組可以比較大小,先按長度,然後按元素的鍵值比較。
maps:to_json(map)->bin 把對映組轉換成二進位制型,包含了json表示的該對映組。
maps:from_json(bin)->map 把乙個包含json資料的二進位制型轉換成對映組。
maps:safe_from_json(bin)->map 把乙個包含json資料的二進位制型轉換成對映組。bin裡面的任何原子都必須已經存在,否則會拋異常。
Erlang 記錄和對映組
對映組 是鍵 值對的關聯性集合。記錄 是元組的另一種表示形式,它的儲存與效能特性和元組一樣。記錄的語法形式 record name,說明 name 為記錄的名稱,key1,key2為記錄的各個字段必須為原子。記錄的定義可以儲存在erlang源 檔案裡,也可以由擴充套件名為.hrl的檔案儲存,然後包含...
erlang 順序程式設計 記錄與對映組03
記錄其實就是元組的另一種形式。儲存與效能特性和元組一樣。應用場景 建立 讀取 更新 建立 record todo,讀取shell裡,shell編譯 rr records.hrl 建立乙個副本 todo 建立乙個副本並修改元素 x1 todo.以x1為副本建立,並修改其中元素 x2 x1 todo.模...
Erlang下map(對映組)的問題
主要是遇到 map匹配的問題,所以順便回憶一下 erlang 中的對映組 map,在其它語言中被稱作 hash 雜湊或者 dict 字典。erlang 從 r17 版本開始支援對映組 建立對映組 erlang 中的對映組用結構 表示,建立乙個對映組可以這樣 不管你怎麼排序,最終結果都是按鍵的字典順序...