读书人

clojure-根本语法-集合(二)

发布时间: 2013-03-21 10:08:17 作者: rapoo

clojure-基本语法-集合(二)
三、映射Map
Map存储一个键-值对的集合。键和值都可以是任何数据类型的对象,无论是基本数据类型还是其它映射。然而,使用关键字来作为映射的键非常合适,因此它们经常在应用映射的场合被使用。clojure的Map有三种实现方式:数组映射、哈希映射和有序映射。它们分别使用数组、哈希表和二叉树来作为底层实现。数组映射适用于较小的映射,而对哈希映射和有序映射的比较则要基于特定应用场合的情况。Map形式以“{:a 1 :b 2}“符号表示
创建Map的方式:
1、简单定义
直接通过def绑定某个符号为映射形式,如下:



3、array-map:
array-map创建数组映射,也有资料说是有序映射(不是根据key排序的意思,而是根据元素的初始顺序,相对于hash-map中key的位置不确定而言)


操作Map的函数:
1、assoc(更新):
在vector部分已经提到assoc,不过assoc函数作用在map上,相当于把参数中的key value对添加到已有map中,如果key相同,则更新成参数中的value。


2、dissoc(删除):
dissoc函数是将map中指定的key丢弃掉,并返回新的map


12、update-in(更新):
update-in函数用于更新map中指定key对应的值,不过更新方式使用第三个参数(函数)


13、merge(更新):
merge函数用于合并多个map为一个新的map,如果key相同,则保留后一个参数map的key对应值


14、merge-with(更新):
merge-with可以作为merge的升级版,不仅合并map,还能以第一个参数(函数)对key相同的value做处理。
user=> (clojure.set/union #{1 2 3} #{1 2 4});合并子集#{1 2 3 4}user=> (clojure.set/select even? #{1 2 3 4 5});根据条件选择#{2 4}user=> (clojure.set/difference #{1 2 3} #{1 2 4});取差集#{3}user=> (clojure.set/intersection #{1 2 3} #{1 2 4});取交集#{1 2}

读书人网 >软件架构设计

热点推荐