【中低階級】-列舉(Enum)、群集(Collection)

閱讀時間約 13 分鐘
  本篇要分享的內容包含Enum、Dictionary、Stack、Queue、IComparable<T>、IComparer<T>、CompareTo、Compare等等相關內容。它們與Array和List有些類似,都是資料集合存取或資料其他相關處理的部分,我們就來看一看它們是何方神聖吧~

一、列舉Enum

  顧名思義就是列出有哪些內容並且會用名稱來代表數字,通常用在判斷狀態下使用,最大的用途就是可以幫助我們提升程式的易閱讀性,在使用Enum時它會以預設的uint形態下儲存到記憶體裡,它允許的型別包含:byte、sbyte、short、ushort、int、uint、long、ulong等。
  所以說當我們在Enum中依序寫了睡覺、吃飯、玩樂這三件事,那麼睡覺就代表0,吃飯就代表1、玩樂就代表2以此類推,除非有特別去定義說睡覺是5,那麼吃飯就會是6,玩樂就會是7,數字是慢慢累加上去的,若每個狀態都會給予相對應數字的話,寫入Enum的狀態順序就不這麼重要了,就看偉大的設計師您想要怎麼設計囉~
  那麼也因為是這樣的狀況像是switch...case...這個條件式選擇,通常會出現case 0、case 1、case 2...這樣的程式,數字也是累加上去,每一個也都代表不同條件或狀態,因此也很適合使用Enum用在這邊,醬就會更容易讀取程式了,不用擔心說:咦?0是指什麼?1又是指什麼?又還要回去翻找的狀況發生。
  這邊利用UNO牌來跟大家說明好哩~也順便檢視一下自己熟練程度,應該多多少少有玩過吧!這邊我們暫時先不把黑色特別牌放進來,牌的種類有四種顏色、每種牌都有數字或是功能用途,就來跟大家介紹Enum怎麼使用。

實例:UNO抽牌

Enum(列舉)
類別程式(列舉)
主程式(列舉)
執行結果(列舉)
說明:
【Enum】:這邊我使用兩個Enum,一個是對於顏色分類,另一個是數值。把我們想要分類的內容放進來。

【類別】:
(1)第15-29行:這邊是跟主程式去做傳遞值的部分
(2)第15行:使用的參數會使用到enum,因此在寫這個參數的時候,就會是先寫enum的命名再寫變數,也就是Color color,前者是enum的分類命名後者是變數
(3)第21-29行:由於取得的值是屬於enum,因此要顯示字串則使用「.ToString()」轉為字串
(4)第31-53行:這邊是利用switch...case...來使用enum,這邊的case後面不是跟著數字,而是直接顯示enum中的該內容,也就是Color.red....這樣的表示方式。這邊執行的內容就是將抽取的顏色從英文轉換為中文文字。

【主程式】:
(1)第21行:因為我們要做的事是抽牌會用到亂數,所以先建立它。
(2)第25行:這邊就是照常建立物件(類別的格式)
[參數部分]->由於我們的亂數是對於enum裡的內容做隨機抽取,因此在random前面加入(Enum的分類命名),也就是程式裡寫的(Color)random.Next(4),這樣的寫法
(3)第26行:用文字顯示抽牌結果
(4)第28行:這邊就是去執行類別中的Switch部分
(5)第29行:這邊就是將Switch執行完的結果,在label1下一行顯示出來。
(6)第31行:這是用相對位置顯示抽中的該圖片(往後會再提)

二、字典Dictionary

  它的功能很像List可以處理很多型別也可以存放任何東西,包括字串、數字、物件都可以存取哦!它跟字典很像,把一些資料輸入進去後可以用查詢方式找到我們想要的資料,主要用途就是只要一個鍵(key)就可以去尋找相對應的資料或內容值,此內容值可以是Array、List都可以。
  使用Array、List要處理資料可能就需要做整批做處理會運用到迴圈,然而Dictionary這個就只要找到key就可以提取一個或該組資料內容出來了。

1.看一下Dictionary用法:

Dictionary<資料型態1 , 資料型態2> 變數名稱 =  new Dictionary<資料型態1 , 資料型態2>();

2.增加項目資料

變數名稱.Add(內容值a , 內容值b);

3.查詢項目資料

string  findData = 變數名稱[內容值a];

4.刪除項目資料

變數名稱.Remove(內容值a);

5.計算Dictionary中key的數量

int keyNum=變數名稱.Count;

三、堆疊Stack & 佇列Queue

  這兩個都是屬於群集(Collection)部分,並且都是對於有特定順序的方式來處理資料,堆疊(Stack)是像疊羅漢一樣先進後出(First-in Last-out)的方式在處理資料;佇列(Quene)是像排隊買東西一樣先進先出(First-in First-out)的方式在處理資料。故若想從它們資料中去取出內容值的話,取出後該值就不會在那堆資料中,因為已經被拿出來了。
  堆疊(Stack)是使用push將內容值放入stack中,然而使用pop將內容值從stack中取出,由於資料像是疊羅漢一樣第一個放進去的就會在最底下,那麼要取中間的值必須把壓在它上面的都拿掉才可以取得。

1.堆疊(Stack)使用方法:

Stack<資料型態> 變數=new Stack<資料型態>();
變數.Push(內容值);   //放入內容值
資料型態 LookValue=變數.Peek();   //查看最後一個的內容值(只是查看而已)
資料型態 getValue=變數.Pop();   //取值
int countNum=變數.Count();  //計算內容值共有多少數量
變數.Clear();  //清除所有內容值
  佇列(Queue)是使用enqueue來增加內容值,取出內容值則是使用dequeue,由於它像排隊一樣增加內容值是從後面加入進去的,取出則是從前面取出的,因此當我們從前面取出內容值的時候,原本此值的後面所排列的內容就會往前遞補,如同排隊第一個離開隊伍後,後面的人就會跟著往前遞補上去了。
這邊要注意的是!!它也很像串燒一樣是不能從中間的索引值去增加或刪除內容值的哦!

2.佇列(Queue)使用方法:

Queue<資料型態> 變數=new Queue<資料型態>();
變數.Enqueue(內容值);  //
資料型態 LookValue=變數.Peek();   //查看最後一個的內容值(只是查看而已)
資料型態 getValue=變數.Dequeue();  //取值
int countNum=變數.Count();  //計算內容值共有多少數量
這兩個Stack和Queue可不可以放入List裡面呢?是可以的!他們之間轉換關係可以這麼做:
主程式(Stack、Queue、List 轉換)
執行結果(Stack、Queue、List 轉換)
倘若你想要使用foreach迴圈去取得裡面的值做轉換也還是可以的,只是要看我們要怎麼去使用這些工具而已。
說明:
(1)我們使用label來顯示結果可以看到一件事,對於stack和queue只要取出內容值後裡面的資料都會被刪除,所以一開始計算共有多少數量時原本為3個,到最後再計算一次就變為0個了。那麼List就不一樣,取資料後它並不會把資料做刪除的哦!

(2)用圖示來看一下它們的運作過程:
資料放入Stack A
Stack A 轉到 Queue B
Queue B轉到List C
List C轉到 Stack D
(3)所以說對於堆疊(Stack)和佇列(Queue)使用Peek查看資料的時候,就會是Stack最上面的值以及Queue最前面的值哦!

四、IComparable<T>、IComparer<T>、CompareTo、Compare相關用法

  對於資料還有這幾個工具它們是比較大小和排序的概念,遇到字串則是比較字母順序,數字就按照它的大小排列這沒有問題。
  有看到IComparable、IComparer這兩個它們的開頭都是I,也就是說它們都屬於「介面」哦!所以說若使用這個介面就代表要去實作它,那麼它們裡面只有一個CompareTo或者Compare這個方法是可以與另一個物件做比較的,它會搭配內建的Sort去做排列。

1.不是有了Sort功能可以做排序了嗎?為何還會有這個工具呢?

  是因為這個功能排序方法是可以依照我們想要的規則去做排列的哦!甚至是可以去結合使用列舉Enum來當作排序的依據做排列,這樣想要按自己設定的規則方式做排列就可以選擇此工具了,然而若對於List只用Sort,沒有搭配此工具就是依照預設的數字大小或字母順序做排列的,並無法按我們的想要的方法去做排列哦!

2.實例1:IComparable<T>和CompareTo用法

Step1:建立類別(ClassDog)將要比較的欄位需用public,使用IComparable<ClassDog>實作,並且使用CompareTo的方法
Step2:建立列舉(EnumDogKind),把想要排序的順序列出來
Step3:在主程式中建立List把要比較的類別放入List的資料型態中,並且建立List內容
Step4:主程式中建立完List後使用Sort去做排列
看一下實際程式狀況:
類別(使用IComparable介面排序)
列舉(使用IComparable介面排序)
主程式(使用IComparable介面排序)
執行結果(使用IComparable介面排序)
說明:
【ClassDog】:由於要用自己的規則做排列,因此實作IComparable介面就是在ClassDog後面加入:IComparable<ClassDog>
(1) IComparable<放的是要比較的類別>
(2)欄位部分就是將要比較的EnumDogKind當作規則,因此就將它先設一個變數為Kind
(3)此類別因為使用了IComparable介面,故此類別要使用CompareTo這個方法
(4)CompareTo(這邊的參數就是放要比較的類別)
(5)第17-28行:這邊就是去做排列的處理動作,依序兩個兩個去做比較排列,然而比較的內容這邊以Kind為主,規則是以列舉Enum的順序去做排列。

註:想要使用年齡來排序,CompareTo寫法就會是
類別_修改為Age來排列寫法(使用IComparable介面排序)
【Enum】:這邊就依照想要的規則依序列舉出來

【主程式】:
(1)List建立是以ClassDog為資料型態,因此新增的內容可以使用類別中使用public定義的欄位內容,也就是Kind和Age。由於Kind是使用EnumDogKind類別,因此它的值就使用EnumDogKind底下的內容。
(2)建完後做Sort排列。可以把中斷點放在這邊(點選行數旁邊位置),接著再按F11可以進入函式逐步執行程式,看一下程式是怎麼運行的哦!中斷點就想下圖,執行的時候就會停在這裡。
中斷點
(3)接著想要看一下排列後的結果就使用Foreach迴圈,我們使用label來顯示結果。

3.實例2:IComparer<T>和Compare用法

類別(使用ICompare介面排序)
主程式(使用ICompare介面排序)
執行結果(使用ICompare介面排序)
說明:
倘若你還要運用以Age為主來做排列,那麼就可以使用ICompare介面
(1)再新增一個類別名稱多加入Compare,由於要使用ICompare介面,因此在此類別後也要使用:ICompare<比較的類別>,這個比較類別也就是ClassDog這個類別

(2)那麼這個介面也必須使用Compare這個方法,因此也要將它寫入此類別中,然而它的參數會是以ClassDog這個類別為主,並且為2個參數,裡面寫的內容也就是要做排序的程式內容。

(3)【主程式】:由於我們要使用的排列是新建的類別(也就是ClassDogComparer),因此要新建立一個物件後,再去做Sort排列並且參數為新建的類別名稱變數。
大家可以看一下這兩者之間的排列差異在哪裡,接下來說一下這兩者的差別:

4.IComparable<T>  V.S.  IComparer<T> 差別

  想要對於自訂義方式做比較的話就使用IComparable<T>、IComparer<T>。當我們只需使用一個做比較的話,就可以使用IComparable<T>,若你還要再用其他的欄位做比較的話,也就是兩個以上要做比較的話,就再用IComparer<T>

工具手法有很多種,所以我們除了了解這些工具外,學習如何舉一反三並且靈活運用也是學程式重要的一環哦!
目前的我們就是要先知道有哪些工具可以使用,等到程式寫多了就可以開始訓練自己靈活運用使用各種手法來呈現,一開始先使用自己會的工具來呈現成果沒關係,過程中再慢慢學習各種工具去累加自己的程式工具箱,熟練了就隨時都可以拿出來使用了唷~
倘若能力足夠就可以去分析使用什麼樣的工具寫法會更好,程式會更簡短或是更容易讀取哦~

為什麼會看到廣告
20會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
留言0
查看全部
發表第一個留言支持創作者!
橙果杏的沙龍 的其他內容
  物件導向說到這邊其實修飾詞不只有之前所提的public、private這些,還有可能遇到抽象(abstract)、虛擬(virtual)、覆寫(override)、隱藏(new)、密封(sealed)、介面(interface)等等,我們就來看一下它們的差異吧~
三、多型(polymorphism)   多型就是在同事物下使用不同條件就可以表現出不同的形態。舉例來說:以「小貓」為例它會有不同的屬性,包括品種、名字、年齡等等,對於每一隻就會有不同的動作如:趴、走、坐、跑等等行為。那麼 .小貓就屬於「同一事物」 .品種、名字、年齡這些就屬於「不同條件」 .趴、走
二、繼承(inheritance) 繼承就是假如A(子)類別去繼承B(父)類別,那麼A(子)類別可以直接去使用B(父)類別非私有的屬性和方法,但是A(子)只能繼承一個B(父)類別ㄛ! 一樣的道理可以比喻為:爸爸跟小孩之間的關係。小孩可以去運用爸爸的資源,但是爸爸的工作屬於他自己的不能跟小孩一起分享,
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
亂數是要做什麼用的?生活中其實有很多有關亂數的事,例如說:樂透摸彩、抽籤、驚喜包、中獎者、擲骰子等等都是跟亂數有關哦!它們都是將所有的數都丟進去一個空間裡再隨機抽取,在不重複的狀況下每一個數抽到的機率都是一樣的。 在程式中也有這個玩法哦!但是說是這麼說到底怎麼用,咱們來看看: 語法: 在隨機抽取的時
  物件導向說到這邊其實修飾詞不只有之前所提的public、private這些,還有可能遇到抽象(abstract)、虛擬(virtual)、覆寫(override)、隱藏(new)、密封(sealed)、介面(interface)等等,我們就來看一下它們的差異吧~
三、多型(polymorphism)   多型就是在同事物下使用不同條件就可以表現出不同的形態。舉例來說:以「小貓」為例它會有不同的屬性,包括品種、名字、年齡等等,對於每一隻就會有不同的動作如:趴、走、坐、跑等等行為。那麼 .小貓就屬於「同一事物」 .品種、名字、年齡這些就屬於「不同條件」 .趴、走
二、繼承(inheritance) 繼承就是假如A(子)類別去繼承B(父)類別,那麼A(子)類別可以直接去使用B(父)類別非私有的屬性和方法,但是A(子)只能繼承一個B(父)類別ㄛ! 一樣的道理可以比喻為:爸爸跟小孩之間的關係。小孩可以去運用爸爸的資源,但是爸爸的工作屬於他自己的不能跟小孩一起分享,
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
亂數是要做什麼用的?生活中其實有很多有關亂數的事,例如說:樂透摸彩、抽籤、驚喜包、中獎者、擲骰子等等都是跟亂數有關哦!它們都是將所有的數都丟進去一個空間裡再隨機抽取,在不重複的狀況下每一個數抽到的機率都是一樣的。 在程式中也有這個玩法哦!但是說是這麼說到底怎麼用,咱們來看看: 語法: 在隨機抽取的時
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
如果你曾凌虐身邊的低階眾生,那麼,你要有心理準備,因為總有一天他們會轉生為人,被殺生者來索命,被凌虐者來找麻煩,不管你逃到天涯海角,或是能逃過今生,終究要償還業報。 我在這裡所說的低階眾生,不只是指困在畜牲色身的狗貓牛羊魚蝦,也指那些剛剛從畜牲道,轉生為人的弱勢族群。
Thumbnail
日本人享有世界公認的健康長壽生活,背後隱藏著一系列的生活和飲食習慣。 研究表明,僅僅遵循一項特定的飲食習慣就能使死亡率降低15%。 那麼,是什麼秘密讓日本人能夠健康長壽呢? 以下是揭開日本人健康長壽的六個秘密。 ### 1. 高攝取海鮮 日本是一個島國,海鮮是日本飲食中的重要組成部分。 富含
Thumbnail
*歐元區商業疲軟 增加了經濟衰退的可能性 *美禁令影響 中國CSP高階AI伺服器明年出貨比低於4% *10月工業生產指數連17黑 製造業表現兩樣情 *10月批發零售業營業額降0.9% 零售、餐飲業則表現亮眼
Thumbnail
     此書用較為詼諧嬉鬧的手法呈現劇情。講述為了調查起獲貪贓枉法的三江口盧局長失蹤案,而從中央空降神探來辦案的張一昂刑警,如何在人生地不熟又敵我不明的情況下,能急中生智、吉星高照、否極泰來,乍看不按牌理出牌或恣意妄為,卻能接連破獲重大刑案,擄獲眾人信任的推理喜劇。  
Thumbnail
談到面試這件事,我可能真的有很多甘苦談可以分享給大家。發表《面試不成的12個原因(上)最好是不符所需啦!》及《面試不成的12個原因(下)被當分母了》兩篇文章後,受到不少的關注,我決定再來分享跟面試有關的三個彩蛋。 面試是每個上班族都會遇到的。本文這三個彩蛋,或許你可以稱之為經典、離譜、不專業⋯⋯
Thumbnail
近期巨大展延票期風暴,引發市場關注庫存與現金流問題。 11/23法說會,巨大稱,雖然中低階車銷售緩、零件堆高,但中高階車仍強,且中國解封、市場復甦,有望消化中低階車款。 下半年中低階車搶貨潮不再,毛利率、營益率同降;中高階車則面臨零組件缺貨、出貨不順,無法回到2018年常態。
Thumbnail
重點先行: Ebike鍊條技術門檻高,前三季年增30%,搭配chainring可組自行車系統、合併銷售。高階品成長動能看好。 從傳統零件製造商,到佈局品牌服務,目前在歐洲、北美有多間銷售據點搶市,有品牌護城河。 原物料、匯率不利因素淡化,助推毛利率。但中低階產品庫存修正持續,需留意後市。
Thumbnail
因為有部分讀者可能沒跟上個人的思路,所以再寫此篇完整交代個人這波低價純銀行股思考過程的轉折。 首先,不管節奏是否跟上,都請不用擔心,低價純銀行股個人一直以臺企銀、遠東銀為例子的主因,在於節奏即使不同,反應時間都會相當充足,不會有那種差個一天,就有天堂地獄之別的情況發生。
Thumbnail
當我們的靈識經過「隔陰之迷」,六識七識的記憶被完全清空後,從出生的那一刻起,我們就已經是低階肉身的「奴隸」了。 因為,人類童年期的「五蘊」,都是以「生物層次」本能架構起來的「意識作業平台」,等到了青少年和成年,大部分凡夫就會因此產生「身見我執」...
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
如果你曾凌虐身邊的低階眾生,那麼,你要有心理準備,因為總有一天他們會轉生為人,被殺生者來索命,被凌虐者來找麻煩,不管你逃到天涯海角,或是能逃過今生,終究要償還業報。 我在這裡所說的低階眾生,不只是指困在畜牲色身的狗貓牛羊魚蝦,也指那些剛剛從畜牲道,轉生為人的弱勢族群。
Thumbnail
日本人享有世界公認的健康長壽生活,背後隱藏著一系列的生活和飲食習慣。 研究表明,僅僅遵循一項特定的飲食習慣就能使死亡率降低15%。 那麼,是什麼秘密讓日本人能夠健康長壽呢? 以下是揭開日本人健康長壽的六個秘密。 ### 1. 高攝取海鮮 日本是一個島國,海鮮是日本飲食中的重要組成部分。 富含
Thumbnail
*歐元區商業疲軟 增加了經濟衰退的可能性 *美禁令影響 中國CSP高階AI伺服器明年出貨比低於4% *10月工業生產指數連17黑 製造業表現兩樣情 *10月批發零售業營業額降0.9% 零售、餐飲業則表現亮眼
Thumbnail
     此書用較為詼諧嬉鬧的手法呈現劇情。講述為了調查起獲貪贓枉法的三江口盧局長失蹤案,而從中央空降神探來辦案的張一昂刑警,如何在人生地不熟又敵我不明的情況下,能急中生智、吉星高照、否極泰來,乍看不按牌理出牌或恣意妄為,卻能接連破獲重大刑案,擄獲眾人信任的推理喜劇。  
Thumbnail
談到面試這件事,我可能真的有很多甘苦談可以分享給大家。發表《面試不成的12個原因(上)最好是不符所需啦!》及《面試不成的12個原因(下)被當分母了》兩篇文章後,受到不少的關注,我決定再來分享跟面試有關的三個彩蛋。 面試是每個上班族都會遇到的。本文這三個彩蛋,或許你可以稱之為經典、離譜、不專業⋯⋯
Thumbnail
近期巨大展延票期風暴,引發市場關注庫存與現金流問題。 11/23法說會,巨大稱,雖然中低階車銷售緩、零件堆高,但中高階車仍強,且中國解封、市場復甦,有望消化中低階車款。 下半年中低階車搶貨潮不再,毛利率、營益率同降;中高階車則面臨零組件缺貨、出貨不順,無法回到2018年常態。
Thumbnail
重點先行: Ebike鍊條技術門檻高,前三季年增30%,搭配chainring可組自行車系統、合併銷售。高階品成長動能看好。 從傳統零件製造商,到佈局品牌服務,目前在歐洲、北美有多間銷售據點搶市,有品牌護城河。 原物料、匯率不利因素淡化,助推毛利率。但中低階產品庫存修正持續,需留意後市。
Thumbnail
因為有部分讀者可能沒跟上個人的思路,所以再寫此篇完整交代個人這波低價純銀行股思考過程的轉折。 首先,不管節奏是否跟上,都請不用擔心,低價純銀行股個人一直以臺企銀、遠東銀為例子的主因,在於節奏即使不同,反應時間都會相當充足,不會有那種差個一天,就有天堂地獄之別的情況發生。
Thumbnail
當我們的靈識經過「隔陰之迷」,六識七識的記憶被完全清空後,從出生的那一刻起,我們就已經是低階肉身的「奴隸」了。 因為,人類童年期的「五蘊」,都是以「生物層次」本能架構起來的「意識作業平台」,等到了青少年和成年,大部分凡夫就會因此產生「身見我執」...