位元詩人 [Raku] 程式設計教學:Set、Bag、Mix

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

集合 (Set) 是非線性的單一元素的集合,實作數學上的集合論 (set theory)。在 Perl 5,通常是用雜湊模擬集合,Perl 6 則內建集合容器。BagSet 相似,但會計算該元素出現的次數;MixBag 類似,但允許以非整數來計數;除了用來計數外,BagMixSet 相當類似。

建立集合

建立串列後呼叫 Set 方法即可將其轉為集合。如下例:

但是 Set 建立後即不可變動,如果之後要變更其元素,需改用 SetHash,實例如下:

加入及移除元素

加入元素的方法類似於雜湊,將鍵設為 True 即可;移除時則將鍵設為 False

檢查元素存在性

使用 (cont) 可檢查某集合是否包含某元素,如下例:

也可以使用 (elem) 檢查某元素是否屬於某集合,如下例:

基本上,兩者是同義的,使用自己習慣的方式即可。

集合運算

Perl 6 集合包含一些常見的集合運算,像是聯集 (union)、交集 (intersection)、差集 (difference) 等。實例如下:

建立 Bag

對串列呼叫 Bag 方法即可建立 Bag,如下例:

如果建立 Bag 後,需更動其內容,改用 BagHash 即可。

取樣本

由於 Bag 有權重,可設置權重後,對其取樣,如下例:

觀察本程式,可發現每次取像的結果都不同,在其中,1 出現的機率最高。

建立 Mix

由於 Mix 的權重是非整數,較常用的方式是直接對其設權重,如下例:

如果建立 Mix 後,需更動其內容,改用 MixHash 即可。基本上,Mix 的用法和 Bag 差不多。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。