日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

[转载] 黑马程序员_学习笔记8_C#基础归纳之数组

發布時間:2025/3/11 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] 黑马程序员_学习笔记8_C#基础归纳之数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接: Java中的鋸齒數組Jagged array

---------------------- Windows Phone 7手機開發、.Net培訓、期待與您交流! ----------------------?

什么是數組??

? ?數組是一組數據結構,它可以包含同一類型的多個元素。C#用特殊記號還申明和初始化數組。這其實是在后臺把當前數組和Array聯系起來,?

以便數組可以使用Array提供的某些功能。?

??

數組分簡單數組和多維數組。?

? ?

簡單數組:?

數組的申明 int[] intarr;?

數組的初始化有四種形式:?

1: int[] intarr = new int[4];//給定數組階數?

2: int[] intarr = new int[4]{1,2,3,4};//給定階數,并給定每個元素的具體數值?

3: int[] intarr = new int[]{1,2,3,4};//不給定階數,就必須每個元素的具體值(和1對應)?

4:? int[] intarr = {1,2,3,4};//最簡形式(類比第三種)?

??

訪問數組元素:?

? 數組只有再申明和初始化之后才能訪問到數組元素。數組元素只支持整數索引。?

? ?int[] intarr ={1,2,3,4};?

? ?int v1 = intarr[0];//訪問?

? ?intarr[1] =5;//賦值?

使用數組也特別注意一點 不要超過當前數組的索引長度。?

比如:intArr[100]=6;//此時編譯器就會跑出一個IndexOutOfRangeException的異常。?

??

數組元素的迭代訪問可以有兩種方式。?

通過數組元素的Length屬性 進數組進行循環迭代。?

for(int i=0;i<intarr.Length;i++)?

{?

? ? ? ? ? Console.WriteLine(intarr[i]Tostring()?

}?

該可以使用foreach對數組進行迭代?

foreach(int i in intarr)?

{?

? ? Console.WriteLine(i.ToString());?

}?

不是所有的數據對象都能使用foreach進行迭代,只有實現了IEnumeraable接口的對象 才能使用foreach對其進行迭代。?

前面也已經說過了,在C#中使用【】申明數組 其實也是使用Array類的標記,Array是實現了該接口的,所以你可以使用foreach對?

數組對象進行迭代。?

??

數組除了上面 .NET預定義的數據值類型之外,還可以是我們自己定義的應用類型。?

class? Person?

{?

? ? ?public Person(string name,string age)?

? ? ?{?

? ? ? ? ? ? this.Name = name;?

? ? ? ? ? ? this.Age =age;?

? ? ?}?

? ? ? public string Name{get;set;}?

? ? ?public int Age{get;set;}?

}?

??

Person[] MyPersons = new Person[2];?

MyPerson[0]=new Person("jack",25);?

MyPerson[1] = new Person("Tom",21);?

??

特別注意,對于引用類型數組,必須為每一個數組元素指定引用(分配內存)。否則 就會跑出NullReferenceExpection異常.?

??

??

多維數組:?

二位數組?

?int[,] twodim = new int[1,1];?

? twodim[0,0]=1;?

? twodim[0,1]=2;?

? twodim[1,0]=3;?

? twodim[1,1]=4;?

? 二維數組可以看做是一個普通的表結構。?

?二維數組的遍歷?

?for(int row =0;row<twodim.Length(0);row++)//先遍歷行?

{?

? ? ?for(int col=0;col<twodim.Length(1);col++)//在遍歷列?

? ? {?

? ? ? ? ? ? ?Console.WriteLine("Row? {0}? ?Col{1}? ? ? ?Value{2}",row,col,twodim[row,col]);?

? ?}?

}?

??

鋸齒數組:?

?二維數組可以看錯是一個標準的表結構,鋸齒數組就可以看錯是一個不標準的表結構了 它的列不定必須相同。?

鋸齒數組的申明:?

int[][] jagged = new int[3][];//前面一個中括號中3表示該鋸齒數組有三行,后面[]什么也不寫,表明列不確定,這也符合鋸齒數組的定義。?

鋸齒數組的每一行其實都是一個單獨的數組對象。?

jagged[0] = new int[2]{1,2,3};//?

jagged[1] = new int{4,5,6,7};?

jagged[2] ={7,8,9,10,11};?

??

鋸齒數組的遍歷:?

for(int row =0;row<jagged.Length;row++)//遍歷行,也就是遍歷有多少個數組?

{?

? ? ? for(int element=0;element<jagged[row].Length;element++)//jagged[row]..當前行的那個數組的長度?

? ? {?

? ? ? ? ? ? ? ? Console.WriteLine("第{0}個數組 該數組的當前索引為{1}? ? 值為{2}",row,element,jagged[row][element]);?

? ?

? ?}?

}?

??

??

Array類;在C#中使用[ ] 申明數組其實就是使用Array的標記。?

Array是一個抽象類,抽象類不能實例化,所以不能使用Array[ ]等形式創建數組。?

但Array類提供了一個靜態的方法用于創建各種數據類型的數組?

Array? intarray1 = Array.CreateInstance(typeof(int),5);//此方法的返回類型仍然為Array?

for(int i=0;i<5;i++)?

{?

? ? ?intarray1.SetValue(i,i);?

}?

可以通過強制轉化將intarray1轉化為int[ ]類型?

int[] MyIntArr = (int[])intarray1;?

??

復制數組:?

因為數組是引用類型,所以講一個數組的變量賦于另外一個數組的變量時,就會得到兩個引用相同的一組變量。?

而賦值數組,會使數組實現ICloneable接口。這個接口的方法會定義的Clone()方法將創建數組的淺表復制。?

? ?淺表復制的意思是:?

如果數組元素是值類型,數組間的復制只是復制當前數組的值,而非引用?

int[ ] intArr ={1,1,2,3};?

int [] cloneArr = (int[ ])intArr.Clone();?

如果數組包含的不是值,而是引用,則直接賦值引用?

Person[ ]? Persons ={new Person("jack",25),new Person("Tom",21)};?

Person[ ] ClonePersons = (Person[ ])Persons.Clone();?

??

?數組的排序:?

數組的排序 可以調用Array的Sort方法,此方法通過QuickSort的算法對數組中的元素進行排序。?

Sort方法中 進行排序的元素 必須要實現IComparable接口。.NET內置的string和int等數據類型默認已經實現了該接口,?

所以 你的數組只要是這兩種形式的都可以直接使用Array.Sort()方法進行排序。?

現在我們來敲一個例子,能讓我們自定義的數據類型能夠使用Array.Sort方法進行排序。?

//先定義一個數據類型

public class Person

{

? ? ? public Person(string FirstName,string LastName)

? ? ?{

? ? ? ? ?this.FirstName = FirstName;

? ? ? ? ?this.LastName = LastName;

? ? ?}

?

? ? ?public string FirstName;

? ? ?public string LastName;

}?

我們使Person類繼承IComparable<T>接口(不知道什么是T的 學習日記7泛型)?

public class Person:IComparable<Person>

{

? ? ? //實現接口中的CompareTo方法

? ? public CompareTo(Person other)

? ? ?{

? ? ? ? ? ?if(other==null)

? ? ? ? ? ? ? ? ? throw new ArgsNullExecption("Null");

? ? ? ? ? ?int result = this.LastName.CompareTo(other.LastName);

? ? ? ? ? ? if(result==0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? ?this.FirstName.CompareTo(other.FirstName);

?

? ? ? ? ? ? }

? ? ? ? ? ? ?return result;

? ? ?}

}?

?這個方法首先是比較 Person的LastName 如果相同? 就比較 LastName;?

然后我們就可以使用Array.Sort方法對Person類的對象進行排序了。?

Person[] Persons = {new Person("jack",25),new Person("Tom",21)};

?

Array.Sort(Persons);?

??

數組做作為參數 和返回值:?

int[ ]? DoSomeWithArr(int[ ])?

{?

? ?//...............?

}??

??

數組協變:?

數組支持協變。這表示數組可以申明為基類,其他的派生類都可以作為當前數組的參數?

static void DisplayArrayObject(Object[] obj)?

{?

? ? ?//........?

}?

??

數組片段?

ArraySegment<T>?

它有一個構造函數的重載?

new ArraySegment<int>(param1,param2,param3);?

param1表示為你需要截取的數組對象?

Param2 表示開始索引?

param3 表示長度?

?---------------------- Windows Phone 7手機開發、.Net培訓、期待與您交流! ---------------------- 詳細請查看:http://net.itheima.com/

總結

以上是生活随笔為你收集整理的[转载] 黑马程序员_学习笔记8_C#基础归纳之数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。