美文网首页
erlang map和record选择

erlang map和record选择

作者: randyjia | 来源:发表于2016-08-08 15:02 被阅读893次

    erlang之前数据结构抽象只有record,在OTP 17.0后,引入了map。现在使用了map将近一年了,对map和record的优劣点总结如下。

    • 灵活性
      map比record灵活得多,map中间可以任意加key和value,尽管可以在hrl定义这个map的类型,record 就不行了。基于此,可以认为record是强类型的,所以重构起来很方便;map如果你要重构一个key的名字,我只能呵呵了

    • ide语法支持
      record比map好得多,record里面有提示,map自己小心把key写错,导致匹配或者get的时候出错哦

    • 修改内存结构
      如果热更新更改了record的结构,这次热更新注定要失败的(匹配会失败);map可以避免这种情况,前提是你写了maps:is_key(XX,XX),提前判断有没有这个key。当然为了这次热更新的成功的代码会一直放在代码里面。后来我嫌麻烦,只要更改了内存结构,统统重启。所以,如果是为了热更新成功,可以选用map的话。

    • 结构实现
      record是数组,访问很快,map也不慢,如果你要考虑速度问题选用哪种数据结构的话,我也只能呵呵了。毕竟你要懂一个体系结构中的Amdahl定律

    • 相关api
      使用map,有一个小小的问题,就是lists下面基本和key相关的方法,比如查找,删除,都是默认list里面存储的是record,用map就不行了。所以,需要自己搞一个工具类,至少要有查找和删除、替换吧

    相关文章

      网友评论

          本文标题:erlang map和record选择

          本文链接:https://www.haomeiwen.com/subject/cbyjdttx.html