2012年10月24日 星期三

Array與List

今天來跟大家簡單的介紹一下Array與List,這兩個東西可是程式設計師常用的東西之一,有甚麼用?要怎麼用?Array與List都是變數的一種,差異在於,Array和List可以放很多東西,而之前提過的變數只能放一個東西,不明白!沒關係,我們邊看程式碼邊解釋。

首先登場的是Array,怎麼宣告Array?我們開頭就先說明Array可以放很多東西,所以宣告的時候,就要先說明裡面要放很多【什麼型態】的東西,還有要放幾個。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array_and_List
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] DayOfWeek = new string[7];
        }
    }
}

上面我們宣告了一個要放很多個【string】的Array,變數名稱是【DayOfWeek】,這個Array總共要放【7】個【string】型態的東西。 我們把Array變數【DayOfWeek】宣告好了,接下來要怎麼用?我們來把Array裡面要放的東西放進去。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array_and_List
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] DayOfWeek = new string[7];
            DayOfWeek[0] = "星期一";
            DayOfWeek[1] = "星期二";
            DayOfWeek[2] = "星期三";
            DayOfWeek[3] = "星期四";
            DayOfWeek[4] = "星期五";
            DayOfWeek[5] = "星期六";
            DayOfWeek[6] = "星期日";
        }
    }
}

使用的方法就像上面的程式碼中看到的,變數名稱加上中括號[],中括號中的數字代表索引值,你就可以把資料放進你指定的位置。

上面的程式碼,指定【索引值0】的位置放入字串【星期一】,【索引值1】的位置放入字串【星期二】......直到【索引值6】的位置放入字串【星期日】。

當然,如果你一開始要宣告Array的時候就知道裡面要按照順序放什麼東西,你也可以這樣宣告。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array_and_List
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] DayOfWeek = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
        }
    }
}

那List勒,List怎麼宣告?怎麼用?我們先把Array那部份打上【註解】,表示程式不執行該行,接著我們增加一些程式碼,由於List也是可以放很多東西,於是我們一樣要先說明要放進去的【變數型態】,跟Array不一樣的是,List不需要指定放入的個數。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array_and_List
{
    class Program
    {
        static void Main(string[] args)
        {
            //string[] DayOfWeek = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
            List<string> DayOfWeek = new List<string>();
        }
    }
}

上面我們宣告了一個List變數,變數名稱【DayOfWeek】,接著我們來將資料放入List中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array_and_List
{
    class Program
    {
        static void Main(string[] args)
        {
            //string[] DayOfWeek = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };        
            List<string> DayOfWeek = new List<string>();
            DayOfWeek.Add(null);
            DayOfWeek.Add(null);
            DayOfWeek.Add(null);
            DayOfWeek.Add(null);
            DayOfWeek.Add(null);
            DayOfWeek.Add(null);
            DayOfWeek.Add(null);

            DayOfWeek[0] = "星期一";
            DayOfWeek[1] = "星期二";
            DayOfWeek[2] = "星期三";
            DayOfWeek[3] = "星期四";
            DayOfWeek[4] = "星期五";
            DayOfWeek[5] = "星期六";
            DayOfWeek[6] = "星期日";       
        }
    }
}

我們看到上面的程式碼,List使用前必須要先透過【Add()】方式將資料加入List中,之後一樣可以透過變數名稱加中括弧[]與索引值來指定資料。

好了,看到這裡,你也許會有疑問,為什麼List要先加入東西之後才能用?其實是因為Array在宣告的時候,就自動幫你填入預設值,不需要你處理。

接著你就會開始疑惑,這兩個東西看起來差不多,到底差別在哪?

1、Array使用連續記憶體空間,List【不需要】使用連續記憶體空間。
連續記憶體空間是什麼意思?比方說你要蓋五棟房子,連續記憶體空間代表你要找一個塊夠大的地,可以讓你五棟房子都蓋在一起,在都市應該很難找,到鄉下比較有機會,不使用連續記憶體空間代表代表你只要找到五塊空地,就可以蓋五棟房子,並不要求一定要蓋在一起。

使用連續記憶體空間始有風險的,因為記憶體一直不斷的在存放資料刪除資料,記憶體空間看起來還不少,但很有可能都是零碎的記憶體空間,有時候在宣告比較大的Array的時候會失敗,因為連續記憶體空間不夠。

2、Array輪循速度比較快,List輪循速度比較慢。
以上面蓋房子的例子來說,Array要走過所有房子很快,因為都蓋在一起,但是List就不一樣了,因為房子不一定蓋在一起,所以要走過所有房子就要花比較多的時間。

3、Array無法新增或刪除其中的元素,List可以。
Array因為房子都蓋在一起,一開始就設計好了,沒辦法中間插進去一棟或者是敲掉其中一棟,再把其他棟移過來,但是List因為房子都沒有蓋在一起,所以要增加或減少房子都沒問題。

這邊只能簡單的介紹Array和List,其實他們各自都還有很多東西可以研究,比方說Atrray可以反轉,可以比較其中的元素是否相同......而今天介紹的List其實只是【集合】中的一員,這些之後都會陸陸續續出現,等不及的可以先到MSDN上查詢相關資料,有任何問題歡迎提出來討論,今天就到這了,改天見。

8 則留言: