erlang的map基本使用
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基本使用的更多相关文章
- 8种Nosql数据库系统对比
导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...
- 8种NOsql
虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ...
- 【转】8种Nosql数据库系统对比
导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型nosql数据库的文章.文章由敏捷翻译 – 唐尤华编译.如需转载,请参见文后声明. 虽然SQL数据库是非常有 ...
- Data Base 关于nosql的讲解
Data Base 关于nosql的讲解 nosql非关系型数据库. 优点: 1.可扩展 2.大数据量,高性能 3.灵活的数据模型 4.高可用 缺点: 1.不正式 2.不标准 非关系型数据库有哪些: ...
- NoSQL 数据库系统对比
虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ...
- 8 种 NoSQL 数据库系统对比
导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...
- 数据库 --> 8种NoSQL数据库对比
8 种 NoSQL 数据库对比 NoSQL是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储.现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改 ...
- 对比Cassandra、 Mongodb、CouchDB、Redis、Riak、 Membase、Neo4j、HBase
转自:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/04/26/3044630.html 导读:Kristóf Kovács 是一位软 ...
- 8种Nosql数据库系统对比(转)
导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...
随机推荐
- Java中使用com.sun相关jar包出现编译错误,但是运行没有错误的解决方法和原因
[解决方法]如果你用的是Eclipse 在preference->java->complier->errors/warning->deprecated and restrict ...
- 简单记录一次ORA-00600: internal error code, arguments: [2662]
接上一个,REDO报错搞定后OPEN数据库时又报错ORA-00600: internal error code, arguments: [2662]. 原因是_ALLOW_RESETLOGS_CORR ...
- iOS - 贝塞尔曲线,折线,曲线,波浪线
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHlsYW5fbHdiXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- RF ---library
RF内置库: http://robotframework.org/robotframework/ SSHLibrary: ---WEB自动化测试 http://robotframework.org ...
- HDU - 3874 Necklace (线段树 + 离线处理)
欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/3 ...
- Android利用reative_layout生成梅花界面
XML代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...
- gulp入门-压缩js/css文件(windows)
类似于grunt,都是基于Node.js的前端构建工具.不过gulp压缩效率更高. 工具/原料 nodejs/npm 方法/步骤 首先要确保pc上装有node,然后在global环境和项目文件中都in ...
- C语言序列点问题总结(大多数高等教育C语言教学课程的漏洞)
C语言序列点总结 2013年11月21于浙大华家池 C 语言副作用: (side effect)是指对数据对象或者文件的修改. 例如,语句 v = 99;的副作用是把 v 的值修改成 99. C语言序 ...
- 如何创建虚拟硬盘 + os 读取硬盘参数代码
[0]README 0.1) 本文旨在演示如何利用 bximage 创建虚拟硬盘: 0.2) 利用 os 读取硬盘参数, source code from orange's implemention ...
- C#中图片.BYTE[]和base64string的转换
在C#中 图片到byte[]再到base64string的转换: Bitmap bmp = new Bitmap(filepath); MemoryStream ms = ...