記錄其實就是元組的另一種形式。儲存與效能特性和元組一樣。
應用場景:
建立--讀取--更新
模式匹配提取字段//建立
-record(todo,).
//讀取shell裡,shell編譯
rr("records.hrl").
//建立乙個副本
#todo{}.
//建立乙個副本並修改元素
x1 = #todo.
//以x1為副本建立,並修改其中元素
x2 = x1#todo.
獲取單個元素,使用點#todo = x2.
w.txt.
x2#todo.
匹配記錄
do_something(x) when is_record(x,todo) -> ......
可以上記錄忘記自己的定義,程式設計元組
對映組比元組佔 用x2 = todo.
rf(todo).
//顯示[todo,done,joe,"fix"]元組
x2.
更多的儲存空間
,查詢起來也
更慢。而另一方面,對映組比元組要
靈活得多。
應用場景
特性:建立,
k => v 有則更新,沒有則新增facts = # => "sue", => 45, => ["feng"]
}.
k := v 有則更新,沒有則報錯(推薦:首次新增使用=>,修改全使用:=)
erlang裡的深度複製其實只複製了必要的部分(修改過的),效率很快,輕量級。d1 = ,
d2 = d1#,
獲取值
獲取字串重複數字對應的ascii碼h = #.
# = h.
//獲取到1491
b.
count(str) ->
count(str,#{}).
count([h|t],# = x) ->
count(t,x#);
count([h|t],x) ->
count(t,x#);
count(,x) ->
x.
兩個對映組比較大小。1.比較長度,2.依照key的順序,依次比較value(前乙個value相同比較後乙個)//建立乙個空對映組
maps:new().
//判斷k是否是對映組
erlang:is_map(k).
//對映組轉列表,會按照key公升序排列
maps:to_list(m).
//其他資料轉對映組
maps:from_list(m).
//對映組長度
maps:map_size(map).
//檢視是否有key 這個鍵
maps:is_key(key,map).
//通過key獲取value,沒有拋異常
maps:get(key,map).
//通過key獲取value,沒有返回error
maps:find(key,map).
//獲取所有的key
maps:keys(map).
//刪除乙個元素,其實是返回乙個新對映表,去除需要刪除的元素
maps:remove(key,m).
//同上刪除,這個是同時刪除多個
maps:without([key1,key2...],m).
//同上刪除,需要刪除的是乙個對映組存放需要刪除的資料m2
maps:difference(m1,m2).
io:format裡的 ~p輸出,並用
io:read
或file:consult
讀取
//轉成json二進位制(必須符合json格式的資料才行)
maps:to_json(map).
//json二進位制轉對映組
maps:from_json(bin).
//同上轉對映組。(裡面的原子必須是已經存在的,不能是新增)
maps:safe_from_json(bin).
Erlang 記錄和對映組
對映組 是鍵 值對的關聯性集合。記錄 是元組的另一種表示形式,它的儲存與效能特性和元組一樣。記錄的語法形式 record name,說明 name 為記錄的名稱,key1,key2為記錄的各個字段必須為原子。記錄的定義可以儲存在erlang源 檔案裡,也可以由擴充套件名為.hrl的檔案儲存,然後包含...
Erlang順序型程式設計高階
元組轉換成列表 1 tuple to list 12,cat,hellp 返回當前時分秒 2 time 1 5,10,20 5,10,20 2 hello hello 3 99,97,116 cat 1 bin1 1,2,3 1,2,3 2 bin2 4,5 4,5 3 bin3 6 6 4 lis...
Erlang(6) 記錄和對映組
記錄record 是元組的另一種形式 record name,記錄比較像c 的結構和類。hrl有點想c 的.h檔案 test.hrl record todo,定義乙個叫做todo的記錄。指定了預設值。31 rr test.hrl todo 在shell裡面讀入記錄的定義。rr 是read recor...