大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。
今天要來學習 Clojure 資料型態中的列表 Lists
。
try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/
集合(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)的資料結構。它是唯一的值的集合,這代表集合中的每個元素都是獨一無二的。