如果需要使用同一類型的多個對象,數組是一種資料結構,它包含同一類型的多個元素
一、一維數組
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