maps

  适用于需要在运行时改变数据结构(record则不行)的场景,可以动态增加key

数据量不宜过大,具体多大没有实际数据,

maps from_list  如果list表很长,则相应的耗时时间会很长,此时最好用lists模块。

由于map是动态结构,速度上必然无法匹敌record。

内存大小介于tuple与list之间

lists:sort([1,#{}, {}, []]).

[1,{},#{},[]]

Operations Records Maps Dict
Immutable
Keys of any type  
Usable with maps/folds  
Content opaque to other modules    
Has a module to use it  
Supports pattern matching  
All keys known at compile-time    
Can merge with other instance  
Testing for presence of a key  
Extract value by key
Per-key Dialyzer type-checking *  
Conversion from/to lists  
Per-element default values    
Standalone data type at runtime    
Fast direct-index access    

* The EEP recommends making this possible for keys known at compile-time, but has no ETA on when or if this will happen.

示例代码

-module (test).
-compile([export_all]). % maps:
% find/2 fold/3 from_list/1 get/2 get/3
% is_key/2 keys/1 map/2 merge/2 module_info/0
% module_info/1 new/0 put/3 remove/2 size/1
% to_list/1 update/3 values/1 with/2 without/2 start() ->
A = #{k1 => 1, k2 => 2, k3 => 3},
#{k1 := K1} = A,
A1 = A#{ k1 := K1 + 1}. %
make() ->
% maps: new | from_list
M1 = maps:new(),
% insert new one
M2 = M1#{ k1 => 1},
% update
M3 = M2#{ k1 := 2}, % maps 模块封装了一些函数
maps:put(k2, 2, M3). % 匹配
match(#{k1 := K1}) -> io:format("~p ~n", [K1]);
match(#{nothing := N}) -> io:format("~p ~n", [N]). raw() ->
[ {I, I}|| I <- lists:seq(1, 10000000)]. get() ->
L = raw(),
lists:keyfind(999, 1, L). get2() ->
M = maps:from_list(raw()), maps:get(999, M).

更多阅读:

  http://learnyousomeerlang.com/maps

http://erlang.org/doc/man/maps.html

erlang的map基本使用的更多相关文章

  1. 8种Nosql数据库系统对比

    导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...

  2. 8种NOsql

    虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ...

  3. 【转】8种Nosql数据库系统对比

    导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型nosql数据库的文章.文章由敏捷翻译 – 唐尤华编译.如需转载,请参见文后声明. 虽然SQL数据库是非常有 ...

  4. Data Base 关于nosql的讲解

    Data Base  关于nosql的讲解 nosql非关系型数据库. 优点: 1.可扩展 2.大数据量,高性能 3.灵活的数据模型 4.高可用 缺点: 1.不正式 2.不标准 非关系型数据库有哪些: ...

  5. NoSQL 数据库系统对比

    虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ...

  6. 8 种 NoSQL 数据库系统对比

    导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...

  7. 数据库 --> 8种NoSQL数据库对比

    8 种 NoSQL 数据库对比 NoSQL是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储.现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改 ...

  8. 对比Cassandra、 Mongodb、CouchDB、Redis、Riak、 Membase、Neo4j、HBase

    转自:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/04/26/3044630.html 导读:Kristóf Kovács 是一位软 ...

  9. 8种Nosql数据库系统对比(转)

    导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...

随机推荐

  1. Java中使用com.sun相关jar包出现编译错误,但是运行没有错误的解决方法和原因

    [解决方法]如果你用的是Eclipse 在preference->java->complier->errors/warning->deprecated and restrict ...

  2. 简单记录一次ORA-00600: internal error code, arguments: [2662]

    接上一个,REDO报错搞定后OPEN数据库时又报错ORA-00600: internal error code, arguments: [2662]. 原因是_ALLOW_RESETLOGS_CORR ...

  3. iOS - 贝塞尔曲线,折线,曲线,波浪线

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHlsYW5fbHdiXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  4. RF ---library

    RF内置库: http://robotframework.org/robotframework/ SSHLibrary:   ---WEB自动化测试 http://robotframework.org ...

  5. HDU - 3874 Necklace (线段树 + 离线处理)

    欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/3 ...

  6. Android利用reative_layout生成梅花界面

    XML代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...

  7. gulp入门-压缩js/css文件(windows)

    类似于grunt,都是基于Node.js的前端构建工具.不过gulp压缩效率更高. 工具/原料 nodejs/npm 方法/步骤 首先要确保pc上装有node,然后在global环境和项目文件中都in ...

  8. C语言序列点问题总结(大多数高等教育C语言教学课程的漏洞)

    C语言序列点总结 2013年11月21于浙大华家池 C 语言副作用: (side effect)是指对数据对象或者文件的修改. 例如,语句 v = 99;的副作用是把 v 的值修改成 99. C语言序 ...

  9. 如何创建虚拟硬盘 + os 读取硬盘参数代码

    [0]README 0.1) 本文旨在演示如何利用 bximage 创建虚拟硬盘: 0.2) 利用 os 读取硬盘参数, source code from orange's implemention ...

  10. C#中图片.BYTE[]和base64string的转换

    在C#中 图片到byte[]再到base64string的转换: Bitmap bmp = new Bitmap(filepath);                MemoryStream ms = ...