iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

從零開始的 clojure系列 第 12

Day 12 Clojure- Data Structures - Maps

  • 分享至 

  • xImage
  •  

前言

大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。

今天要來學習 Clojure 資料型態中的映射 Maps

try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/

Maps

映射(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 函數來創建一個映射:

(hash-map :a 1 :b 2)
; => {:a 1 :b 2}

get

可以使用 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 can’t find key, return nil or default

如果 get 找不到 key,它將返回 nil,或者可以給它一個要返回的默認值,例如 "unicorns?"

(get {:a 0 :b 1} :c)
; => nil

(get {:a 0 :b 1} :c "unicorns?")
; => "unicorns?"

get-in

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,包含資料結構、如何創建,以及 getget-in 函數的使用方法。

下一章節將要來學習關鍵字(Keywords)。

參考文章


上一篇
Day 11 Clojure - Data Structures - Strings
下一篇
Day 13 Clojure- Data Structures - Keywords
系列文
從零開始的 clojure23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言