D-24 資料結構 data structure ? List ? Dictionary

還有一種迴圈

昨天介紹時大頭還有一個迴圈的方式沒有介紹,為什麼昨天不介紹呢,是因為篇幅關係還是有其他原因,讓我們看下去。

未介紹 foreach的原因

「前輩早,趕快來介紹昨天沒講的foreach吧,為啥昨天要賣關子呢?」
一大早小光就迫不急待的想跟大頭請教foreach的事情,聽到這個大頭依舊從文件中抬起頭來,經過昨天的休息大頭的黑眼圈不見了,反而是小光臉上多了黑眼圈。
「好喔我們來開始說明一下foreach囉,不過你是怎麼了?」
結果小光不好意思的已笑帶過。接著大頭就開始介紹foreach

foreach

簡單說起來foreach就是巡訪變數中的元素,所以寫起來如下。

foreach(var item in list)
{
    // do something 
}

in 後面要放什麼

「前輩,我有一個問題,關於上述例子之中in後面要放什麼?」
大頭聽到這問題表現出讚賞的表情,並且開始說明這個問題。
「不錯,很專心在聽,in後面放的就是變數」
「蛤⋯變數」
聽到這答案讓小光很訝異,然後大頭卻哈哈大笑起來。
「沒錯是變數,但是不是普通的變數,是一種可以巡訪的變數,讓我來慢慢跟你解釋。」

IEnumerable

剛剛in後面要接的變數是繼承IEnumerable介面的物件的變數,至於什麼是IEnumerable就請大家看一下msdn IEnumerable,不過簡單講就是他有實作巡訪功能的物件。

資料結構 data structure

好了,介紹完foreachIEnumerable之後相信讀者們應該跟小光一樣滿頭問號,其實簡單說明就是大家還不認識資料結構這個東西,所以關於資料結構是什麼請大家先看一下wiki 資料結構的說明,簡單講就是存放資料的一種結構,由於目前大多數語言都有實作這些類型的資料結構,所以讀者們不需要去實作,不過還是要去了解各個結構的特性,接下來我們來說明一下ListDictionary這兩種資料結構。

List

首先我們先來看看msdn List的內容,簡單用法不外乎是新增、刪除、更新以及列出容器內的數量還有巡訪這些需求,與接下來要說明的Dictionary差別在於它是一個連續的資料,當要取得該資料時除非知道他是第幾個位置否則就要一個一個地尋找,因此記憶體使用較Dictionary少,但是尋找特定元素的效率較低,下面列出其新增、刪除、更新以及列出容器內的數量還有巡訪的語法。

// List的初始化
var list = new List<int>(){1,2,3,4,5,6};

// 新增
list.Add(3);

// 取出第三個位置的資料
var item = list[3];

// 移除剛剛取出的資料
list.Remove(item);

// 刪除第0個的資料
list.RemoveAt(0);

// 列出數量
Console.WriteLine(list.Count);

// 巡訪
foreach(var ite in list)
{
    Console.WriteLine(ite);
}

寫完之後發現有個要注意的事項,就是List的位置第一個的是0以此類推,使用時不要弄錯囉。

Dictionary

介紹完ListDictionary就比較簡單了,簡單說明就是說多了一個旅社大廳來告訴使用者變數住在哪裡,而不用自己去記說變數住在哪裡,所以在找的時候也不需要一間房間一間房間的看,所以找特定資料的速度快很多,不免俗地也將資料的處理式子紀錄在下面。

// Dictionary的初始化
var dic = new Dictionary<string, int>()
{
    {"1", 1},
    {"2", 2},
    {"3", 3},
    {"4", 4},
    {"5", 5},
    {"6", 6}
};

// 新增
dic.Add("7", 7);

// 取值
var item = dic["3"];

// 刪除值
dic.Remove("3");

// 列出個數
Console.WriteLine(dic.Count);

// 巡訪
foreach(var ite in dic)
{
    Console.WriteLine(ite.Key);
    Console.WriteLine(ite.Value);
    Console.WriteLine(ite);
}

最後要記住因為是一人一間房,所以不能兩個變數放在同一個Key裡面喔。

後記

「前輩怎麼今天講完後我整個頭昏腦脹的?」
當大頭說完後,小光整個呈現昏迷的狀況,這時大頭一邊哈哈大笑一邊對他這麼說。
「後頭昏眼花代表你有認真聽,但是還不能吸收,我建議你去看看資料結構與演算法的書,相信對你有所幫助。」
聽完之後小光似懂非懂的點點頭,不過過幾秒後又這麼問到。
「那什麼是物件跟介面?」
聽到這相信讀者應該會有同樣的問題,不過待後續會在跟大家介紹,敬請期待。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *