iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

從零開始的 clojure系列 第 16

Day 16 Clojure- Data Structures - Sets

  • 分享至 

  • xImage
  •  

前言

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

今天要來學習 Clojure 資料型態中的列表 Lists

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

Sets

集合(Sets)是一組唯一值的集合。Clojure 中有兩種類型的集合:哈希集合(hash sets)和有序集合(sorted sets)。我們將重點放在哈希集合上,因為它們使用得比較多。以下是哈希集合的文字表示法:

#{"kurt vonnegut" 20 :icicle}

我們也可以使用 hash-set 函數來創建一個集合:

(hash-set 1 1 2 2)
; => #{1 2}

要注意的是, 集合中的相同值只會出現一次,所以我們得到的是一個單一的 1 和一個單一的 2。

如果試圖將一個已經存在的值添加到集合中(例如下面的 :b ),它仍然只會有一個該值:

(conj #{:a :b} :b)
; => #{:a :b}

你也可以使用 set 函數從現有的向量和列表中創建集合:

(set [3 3 3 4 4])
; => #{3 4}

你可以使用 contains? 函數、get 函數,或者將集合作為引數使用關鍵字(keywords)函數來檢查集合中是否包含某個值。contains? 返回 true 或 false,而 get 和關鍵字查找將返回值(如果存在)或 nil(如果不存在)。

以下是使用 contains? 的方式:

(contains? #{:a :b} :a)
; => true

(contains? #{:a :b} 3)
; => false

(contains? #{nil} nil)
; => true

以下是使用關鍵字的方式:

(:a #{:a :b})
; => :a

以下是使用 get 的方式:

(get #{:a :b} :a)
; => :a

(get #{:a nil} nil)
; => nil

(get #{:a :b} "kurt vonnegut")
; => nil

請注意,使用 get 測試一個集合是否包含 nil 將總是返回 nil,這可能會讓人感到困惑。當我們需要具體測試集合的元素時,使用 contains? 或許是更好的選擇。

小結

今天我們學習了集合(Sets)的資料結構。它是唯一的值的集合,這代表集合中的每個元素都是獨一無二的。

參考文章


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

尚未有邦友留言

立即登入留言