erlang之前數(shù)據(jù)結(jié)構(gòu)抽象只有record,在OTP 17.0后,引入了map。現(xiàn)在使用了map將近一年了,對map和record的優(yōu)劣點總結(jié)如下。
靈活性
map比record靈活得多,map中間可以任意加key和value,盡管可以在hrl定義這個map的類型,record 就不行了。基于此,可以認(rèn)為record是強(qiáng)類型的,所以重構(gòu)起來很方便;map如果你要重構(gòu)一個key的名字,我只能呵呵了ide語法支持
record比map好得多,record里面有提示,map自己小心把key寫錯,導(dǎo)致匹配或者get的時候出錯哦修改內(nèi)存結(jié)構(gòu)
如果熱更新更改了record的結(jié)構(gòu),這次熱更新注定要失敗的(匹配會失?。?;map可以避免這種情況,前提是你寫了maps:is_key(XX,XX),提前判斷有沒有這個key。當(dāng)然為了這次熱更新的成功的代碼會一直放在代碼里面。后來我嫌麻煩,只要更改了內(nèi)存結(jié)構(gòu),統(tǒng)統(tǒng)重啟。所以,如果是為了熱更新成功,可以選用map的話。結(jié)構(gòu)實現(xiàn)
record是數(shù)組,訪問很快,map也不慢,如果你要考慮速度問題選用哪種數(shù)據(jù)結(jié)構(gòu)的話,我也只能呵呵了。畢竟你要懂一個體系結(jié)構(gòu)中的Amdahl定律相關(guān)api
使用map,有一個小小的問題,就是lists下面基本和key相關(guān)的方法,比如查找,刪除,都是默認(rèn)list里面存儲的是record,用map就不行了。所以,需要自己搞一個工具類,至少要有查找和刪除、替換吧