大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。
今天要來學習 Clojure 資料型態中的映射 Maps
。
try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/
映射(Maps)類似於其他語言中的字典(dictionaries)或哈希(hashes)。它們是一種將 某個值與其他值關聯起來的方式
。
Clojure 中有兩種類型的映射,分別是 哈希映射(hash maps
和 排序映射(sorted maps)
。我們只會介紹較基本的 hash-maps。
這是一個空映射:
{}
在下面的例子中, :first-name
和 :last-name
是關鍵字(keywords)(我們將在下一節中介紹):
{:first-name "Charlie"
:last-name "McFishwich"}
在這裡,我們將 string-key
與 +
函數關聯起來:
{"string-key" +}
映射也可以嵌套(nested):
{:name {:first "John" :middle "Jacob" :last "Jingleheimerschmidt"}}
請注意,映射的值可以是任何類型,包括字符串(strings)、數字(numbers)、映射(maps)、向量(vectors),甚至函數(functions)。
我們可以使用 hash-map
函數來創建一個映射:
(hash-map :a 1 :b 2)
; => {:a 1 :b 2}
可以使用 get
函數在映射中查找值:
(get {:a 0 :b 1} :b)
; => 1
(get {:a 0 :b {:c "ho hum"}} :b)
; => {:c "ho hum"}
在上面這兩例子中,我們使用 get
查詢給定映射中 :key
的值。
在第一種情況下,它返回 1
,在第二種情況下,它返回了嵌套的映射 {:c "ho hum"}
如果 get 找不到 key,它將返回 nil,或者可以給它一個要返回的默認值,例如 "unicorns?"
:
(get {:a 0 :b 1} :c)
; => nil
(get {:a 0 :b 1} :c "unicorns?")
; => "unicorns?"
get-in
函數可以在嵌套映射中查找值:
(get-in {:a 0 :b {:c "ho hum"}} [:b :c])
; => "ho hum"
在映射中查找值的另一種方法,是將映射視為帶有 key 作為其參數的函數:
({:name "The Human Coffeepot"} :name)
; => "The Human Coffeepot"
我們還可以使用關鍵字作為函數來查找它們的值,這將引導我們到下一個主題,關鍵字(Keywords)。
今天我們學習了 hash-map
,包含資料結構、如何創建,以及 get
、 get-in
函數的使用方法。
下一章節將要來學習關鍵字(Keywords)。