天天看點

(13)C#數組和元組

如果需要使用同一類型的多個對象,數組是一種資料結構,它包含同一類型的多個元素

 一、一維數組

1、數組的聲明方法

int [] a;      

因為數組是引用類型,引用類型有個特點是:聲明變量時不會馬上配置設定一個記憶體,隻有在用new關鍵字建立執行個體的時候,才會配置設定記憶體。

2、建立一個數組執行個體

a=new int[4];      

棧裡的變量a引用了托管堆上的4個整型值。

如果事先不知道數組中包含多少個元素,可以使用集合。

3、初始化數組變量

int[] a=new int[4]{9,5,4,3};      

右邊的[]裡如果寫了數字,那數字必須與{}數字的個數相同。[]給出的是4個,{}裡必須寫入4個資料。

4、初始化數組簡寫

初始化一個數組時可以不寫數字自由配置設定元素個數,或者更簡單直接省略new和int[]。

int[] a = new int[] { 1, 2, 3 };      
int[] a={9,5,4,3};      

5、建立隐式類型的數組

var name=new [] {"tom","jack","luxi","mi"};      

兩個文法上的特别地方:

1、等号左邊省略的[]

2、右邊必須是new[]{}的形式

3、{}裡的資料必須是相同類型,否則編譯器不判斷類型導緻報錯。

6、通路數組元素

提取數組元素

int b=a[2];      

數組元素的下标是從0開始的,是以b的值是4.

給數組元素重新指派

int b=6;

a[2]=b;      

二、多元數組

 數組的維數沒有限制,以二維數組舉例

1、二維數組的聲明

int[,] a;      

2、二維數組建立執行個體

int [,] a=new int[4,2];      

3、初始化

int [,] a= new int[4,2]{{5,6},{7,2},{9,3},{5,4}};
/*可以看做是一個4行2列的表,{5, 6}是第1行的資料,一共4行
       5 6
       7 2
       9 3
       5 4
*/      

4、簡寫

int[,] a= new int[,] { { 1,2 },{ 3,4 },{ 5,6 },{5,4} };
int[,] a = {{ 1,2 },{ 3,4 },{ 5,6 },{5,4}};      

5、通路數組元素

需要用兩個坐标确定一個數的位置。

提取二維數組元素

int b = a[2, 1];      

一定要記住隻有new的時候[]裡的數字表示的是行和列,其他地方a[2,1]這裡的2和1是數組下标啊,是要從0開始算的。

對數組的某個元素重新指派

a[2,1]=5;
//這麼寫就把第三行第二列的值3變成了5
      

三、交錯數組

交錯數組也稱之為數組的數組,

1、聲明

int [][] a;      

2、建立執行個體

int[][]a=new int[3][];      

這個數組裡包含了3個數組,而且這3個數組的長度可以自由設定。

3、指派

a[0]=new int[] {1,4,6,8,};

a[1]=new int[]{2,3};

a[2]=new int[]{6,6,6};      

交錯數組也可以包含二維的數組

例如

int[][,] a =new int[3][,];
a[0]=new int[,]{{2,9},{3,6}};
a[1] = new int[,] { { 2, 9 }, { 3, 6 }, { 8, 8 } };
a[2] = new int[,] { { 2, 9 } };      

四、引用類型數組

有一個Person類

public class Person
    {
        public string a { get; set; }
        public string b { get; set; }
        public override string ToString()
        {
            return String.Format("{0} {1}",a,b);
        }   
    }      

聲明Person數組

Person[] per = new Person[2];      

引用類型的數組必須在使用前為其配置設定記憶體,否則會抛出NullReferenceException異常.

per[0] = new Person { a = "李毅", b = "周傑" };
per[1] = new Person { a = "Tom", b = "Jack" };      

也可以初始化指派

Person[] per = {
                new Person{ a = "李毅", b = "周傑" },
                new Person{a = "Tom", b = "Jack" }
            };      

五、周遊數組

 1、用for語句周遊數組

int [] a={2,9,5,8};
for(int x=0;x<a.Length;x++)
{
 int b=a[x];
Console.WitreLine("b");
}      

2、foreach周遊數組

foreach和for有一樣的功能也能周遊數組,

int[] a={2,9,5,8};
foreach(int x in a)
{
Console.WriteLine(x);
}      

3、for和foreach的對比

.foreach最大的優點就是能夠在不知道數組下标的情況下周遊整個數組,代碼可以寫的簡練些。其他的優勢就沒有for了

.for很靈活不僅可以能正着周遊還能倒着周遊以及還可以跳的周遊。

.如果循環的主題需要元素的下标,則需要用for

.如果需要修改數組元素,則必須用for,foreach修改會報錯。

六、Ayyay類

七、數組作為參數

八、枚舉

九、IEnumerator接口

十、元組

class Program
    {
        static void Main(string[] args)
        {
            //指派元組
            var b = ("tom", 23);
            //調用元組
            Console.WriteLine(b.Item1);//tom
            Console.WriteLine(b.Item2);//23

            //給元組元素定義名稱
            var c = (name: "liu", age: 29);
            Console.WriteLine(c.age);//29
            //雖然vs隐藏了Item1,但是還是可以用這種方式調用
            Console.WriteLine(c.Item1);


        }

        //定義一個傳回元組的函數
        (string, int) stu()
        {
            return ("tom", 23);
        }
    }      

十一、結構比較

十二、數組常用的屬性方法

 數組常用的屬性

int b=a.Length;  //b=8