Clojure语言本身自已有提供了四种集合类型,List,Vector,Set,Map.同时它也可以使用Java的集合类型砂,但是这种方式目前并不推荐使用,因为Clojure集合类型和Java语言的集合类型还是有很大区别的,主要体现在 集合内容不可改变,集合的内容可以多种类型以及持久化。持久化意味着当你在对一个集合的操作都会产生一个新的集合对象(如:插入,删除......),而老的集合对象依然是存在的。
List
List的可以使用如下方式定义:
(def list1 '("aa" "bb" "cc"))
(def list1 (list "aa" "bb" "cc"))
(def list1 (quote ("aa" "bb" "cc")))
以上三种方式都可以定义一个List,和Java中一样List是有序的。
Vector
vector可以使用如下方式定义:
(def v ["v1" "v2"])
(def v (vector "v1" "v2"))
同样vector也是有序的,在Clojure的方法参数定义就是使用的Vector,比如定义一个类以于Java的public void say(String name)用Clojure则使用如下的方式
(defn say [name])
Set
set可以使用如下方式定义:
(def s {"aa" "bb" "cc"})
(def s #{"aa" "bb" "cc"})
(def s (hash-set "aa" "bb" "cc"))
Set分可有序set和无序set,上面示例中的"hash-set"就是代表 无序set,而有序set则可用 sorted-set来定义.
可以用函数 contains? 来检测一个set中是否存在某个元素 (contains? s "aa") 如果s中存在"aa"元素,则返回true,否则返回false.
contains?函数可以使用在Set和Map无素上。
同Java中一样。Set中的元素是唯一的。
Map
map可以使用如下方式定义:
(def m {"k1" "v1","k2" "v2"})
(def m (hash-map "k1" "v1","k2" "v2"))
同样,map也分为有序和无序的,如果想申明有序的map则使用 sorted-map即可。
可以使用函数keys,vals得到键集合和值集合.(keys m)
get函数可以根据key取得相应的val值。(get m "k1") 返回的是"v1"
get也可以用在 其它的集合中,比如从Vector中取元素的值.(get v 1) 代表取出集合v中的第2个无素。注意,集合的编号是从0开始的。
本部分主要简单介绍了一下Clojure中的集合的基本用法。后续会继续介绍更多的一些东西。