Clojure容器一览

在Clojure中有多种方式组织你的数据集,分别是列表(list)、向量(vector)、映射(map)和集合(set)1

先大致看一下每一个的格式2

  • 列表
    '(a b c)
  • 向量
    [1 2 3]
  • 映射
    {:a 1 :b 2}
  • 集合
    #{:a :b :c}

- 列表的相应操作3

创建列表:

(ns clojure.examples.example
   (:gen-class))
(defn example []
   (println (list 1 2 3 4)))
(example)

使用list将一组数据转换为list数据,输出为(1 2 3 4),在书写list的时候应该在其前面加上’,因为括号是Clojure的语言单位,一个括号里的代表一个语句,不加引号会使得系统认为list的第一个元素为函数,后续元素为其操作数据。
引文中给出了列表的常见操作,例如取出首个元素等3

(first '(1 2 3 4 5 6))
;;-> 1

- 向量的相应操作4

创建向量:

(ns clojure.examples.example
   (:require [clojure.set :as set])
   (:gen-class))
(defn example []
   (println (vector 1 2 3)))
(example)

使用vector创建一个向量,输出为:[1 2 3],列表中的一些操作符,同样可以在向量中使用:

(first [1 2 3])
;;-> 1

跟列表不同,向量中你可以快速地通过索引访问到元素:

(nth [1 2 3] 0)
;;-> 1
(nth [1 2 3] 2)
;;-> 3

还有一个函数是last,返回最后一个元素:

(last [:a :b :c])
;;-> :c

其他操作符可在引文中查看4

- 映射的相应操作5

(ns clojure.examples.example   
  (:gen-class))
(defn example []   
  (def demokeys (hash-map "z" "1" "b" "2" "a" "3"))   
  (println demokeys))
(example)

映射又叫map,通过hash-map来构建一个映射,结果为:{z 1 b 2 a 3},同我们接触的其他语言一样,映射是按键值对存储的,我们也可以写成{z 1, b 2, a 3},其中逗号被视为是空格,映射为了可读性保留了逗号,符合惯用法。
可以通过相应的操作符来操作map。例如:

(get {:a 1 :b 2 :c 3} :b "not found")
;;-> 2

通过键来获取到值,并给出默认值,默认值不是必须的,可以省略。

- 集合的相应操作6

创建集合:

(ns clojure.examples.example
   (:gen-class))
(defn example []
   (println (set '(1 1 2 2))))
(example)

使用set将列表转换为集合的操作,输出结果为#{1,2},集合是不重复元素的,具体的集合的函数操作,在引文中详细给出6


  1. Living Clojure(中文版):中国电力出版社 ↩︎

  2. Clojure语言三:容器:https://blog.csdn.net/csfreebird/article/details/8444070 ↩︎

  3. 列表的相应操作:https://www.w3cschool.cn/clojure/clojure_lists.html ↩︎ ↩︎

  4. 向量的相应操作:https://www.w3cschool.cn/clojure/clojure_vectors.html ↩︎ ↩︎

  5. 映射的相应操作:https://www.w3cschool.cn/clojure/clojure_maps.html ↩︎

  6. 集合的相应操作:https://www.w3cschool.cn/clojure/clojure_sets.html ↩︎ ↩︎

你可能感兴趣的:(一起学clojure)