1. 程式人生 > >第5章 記錄與對映組

第5章 記錄與對映組

1.建立記錄:記錄的字尾名為.hrl

%%records.hrl:
-record(todo,{status=reminder,who=joe,text}).

1>rr("records.hrl").
2>#todo{}
#todo{status = reminder,who = joe,text = undefined}

 

2.更新記錄

1>X1=#todo{status=urgent,text="Fix errata in book"}.
#todo{status = urgent,who = joe,text = "Fix errata in book"}

 

3.提取記錄欄位

1>#todo{who=W,text=Txt} = X1.
2>W. 
joe 
3>Txt. 
"Fix errata in book "
4>X1#todo.text.
"Fix errata in book "
5>X1#todo{text="good"}.
#todo{who=joe,text="good"}

 

4.對映組

     語法: #{key Op Vall , key Op val2...} 注意:Op有兩種格式: => 和 :=   

     在第一次定義值時使用 => ,當進行更新值時使用 :=

1>F1=#{a=>1,b=>2}.
#{a =>1,b=>2}
2>F2=F1#{a:=2}
#{a=>2,b=>2}
3>F3= F1#{c =>3}.
#{a =>2,b=>2,c=>3}.
4>F4=F1#{c:=3}
%%將會報錯,因為F1中不存在C

5.對映組的內建函式

  • maps:new() -> #{} 返回一個新的空對映組
  • erlang:is_map(M) -> bool() 如果M時對映組就返回true,否則返回false,可以用在關卡測試或函式主體中
  • maps:to_list(M) ->[{K1,V1},....,{Kn,Vn}] 把對映組M,裡的所有鍵和值轉換成一個鍵值列表.鍵在生成的列表裡嚴格按升序排列
  • maps:from_list([{K1,V1},....,{Kn,Vn}]) -> M 把一個包含鍵值對的列表轉換成對映組M.如果同樣的鍵不止一次出現,就使用列表裡第一個鍵所關聯的值,後續的值都會被忽略。
  • maps:map_size(Map) -> NumberOfEntries 返回對映組裡的條目數量
  • maps:is_key(Key,Map) -> bool() 如果對映組包含一個鍵為Key的項7就返回true,否則返回false
  • maps:get(Key,Map) -> Val 返回對映組裡與Key關聯的值,否則丟擲一個異常錯誤
  • maps:find(Key,Map) -> {ok,Value} | error 返回對映組裡與Key關聯的值,否則返回error
  • maps:keys(Map) ->[Key1,...KeyN] 返回對映組所含的鍵列表,按升序排列
  • maps:remove(Key,M) -> M1 返回一個新對映組M1,除了鍵為Key的項(如果有的話)被移除外,其他與M一致
  • maps:without([Key1,...,KeyN],M) -> M1 返回一個新對映組M1,它是M的複製,但移除了帶有[Key1,...,KeyN]列表裡這些鍵的元素。
  • maps:difference(M1,M2) -> M3 M3是M1的複製,但移除了那些與M2裡的元素具有相同鍵的元素。

6.對映組排序問題:對映組在比較時首先會比較大小,然後再按照鍵的排序比較鍵和值.

7.以JSON為橋樑

  • maps:to_json(Map) ->Bin 對映組轉換為二進位制
  • maps:from_json(Bin) -> Map 二進位制轉換為對映組
  • maps:safe_from_json(Bin) ->Map Bin中的任何原子必須在呼叫次內建函式前就已經存在,否則跑出一個異常錯誤.可以防止建立大量的新原子.