[轉載] 黑馬程序員_學習筆記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/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540175.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540175.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540175.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2Python全棧之路系列之MysQl基本數據類型

Python全棧之路系列之MySQL基本數據類型 MySQL中定義數據字段的類型對你數據庫的優化是非常重要的。 MySQL支持多種類型&#xff0c;大致可以分為三類&#xff1a; 數字類型 日期和時間類型 字符串類型 數字類型 類型大小用途BIT-二進制TINYINT1字節小整數值INT or INTEGER4字…

[轉載] JAVA筆記_(Day04,Day05)函數數組

參考鏈接&#xff1a; 了解Java中的數組IndexOutofbounds異常 文章目錄 函數定義練習誤區重載&#xff08;overload&#xff09;重載選擇題練習函數的內存調用問題 數組定義數組的內存圖解數組的常見問題應用求和最大值將數組轉成字符串查表法轉十六進制查表版&#xff08;十六…

VDI序曲二 RemotoAPP部署

首先&#xff0c;我們需要準備如下角色&#xff1a;沿用VDI序曲一的2臺物理服務器以及角色我們在物理服務器1的hyper-v上&#xff0c;我們利用之前我介紹的“服務器虛擬化之準備母盤VHD”的方法再創建如下虛擬機&#xff1a;WIN-RDAPP&#xff1b;WIN-RDWA&#xff1b;WIN-RDCB…

[轉載] Java ArrayList toArray(T[] a) 解惑

參考鏈接&#xff1a; Java中的Array vs ArrayList 先看一個小的代碼片段 ArrayList<Integer> arrayList new ArrayList<>(); Collections.addAll(arrayList, 11, 21, 31, 41, 51); Integer[] a new Integer[0]; Integer[] b new Integer[arrayList.size()]; …

CentOS7使用firewalld打開關閉防火墻與端口(轉載)

1、firewalld的基本使用 啟動&#xff1a; systemctl start firewalld 查看狀態&#xff1a; systemctl status firewalld 停止&#xff1a; systemctl disable firewalld 禁用&#xff1a; systemctl stop firewalld 2.systemctl是CentOS7的服務管理工具中主要的工具&#xff…

多任務管理類 MutilTaskManager

計算和計算所需的數據能被較為平均的非配到若干task的時候&#xff0c;下面的任務管理類可以提供在大數據大計算量的情況下非精確的控制task的執行數量來限制計算量和內存占用量.下面是代碼&#xff08;非線程安全版本&#xff09;&#xff1a; public class MutilTaskManager{…

[轉載] Scanner和bufferreader讀取控制臺字符的區別

參考鏈接&#xff1a; Java中Scanner和BufferReader類之間的區別 從開始學習Java就用了scanner&#xff0c;因為比較簡單每當遇到空格鍵或者換行鍵則讀取下一個字符&#xff0c;一般用法 while(input.hasNextInt()){ int n input.nextInt(); int t input.nextInt(); int c …

Node.js meitulu圖片批量下載爬蟲1.051

原有1.05版程序沒有斷點續傳模式&#xff0c;現在在最近程序基礎上改寫一版1.051. // // meitulu圖片批量下載爬蟲1.051 // 用最近的斷點續傳框架改寫原有1.05版程序 // 2017年11月21日 //// 內置https模塊 var httpsrequire("https");// 內置http模塊 var httprequi…

[轉載] Java實現歸并排序(超詳細,新手請進)

參考鏈接&#xff1a; Java中將數組合并為的新數組 歸并排序 大家好&#xff0c;這是我第一次在CSDN上寫東西&#xff0c;因為我一直覺得有需要就去找別人的blog看看就好&#xff0c;但我發現自己寫出來的東西確實能加深記憶。我半路出家&#xff0c;屬實是個菜鳥&#xff0…

centos6設置靜態IP

#編輯配置文件,添加修改以下內容 vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTOstatic #啟用靜態IP地址 ONBOOTyes #開啟開機自動啟用網絡連接 IPADDR192.168.21.129 #設置IP地址 NETMASK255.255.255.0 #設置子網掩碼 GATEWAY192.168…

[轉載] 1022 D進制的A+B (20分)【java題解】【80ms】

參考鏈接&#xff1a; Java流Stream 題解 使用 toUnsignedString&#xff08;&#xff09;即可 我有仔細讀過toUnsignedString&#xff08;&#xff09;&#xff0c;有興趣可以看看 第3章 java的基本程序設計結構【補缺學習】【注釋與數據類型】【核心技術卷I】 impor…

mysql 5.6.4以上版本innodb支持全文索引的測試

對于mysql 5.6.4以上版本innodb支持全文索引的測試 在mysql官網&#xff0c;innodb引擎在5.6.4版本提供了對全文索引的支持&#xff0c;筆者對此做了測試&#xff0c;發現對中文全文檢索的支持依然不理想&#xff0c;但卻確實提供了對英文的全文支持。 12.9.5 Full-Text Restri…

[轉載] Java字符串分割方法

參考鏈接&#xff1a; Java中的StringTokenizer方法的示例 2 [sizemedium]1.用split()方法進行分割&#xff0c;分割開的子字符串放入數組&#xff0c;然后進行處理。 示例代碼如下&#xff1a; public class SplitTest { /** * param args * author colin */ …

[轉載] Java StringBuilder StringJoiner

參考鏈接&#xff1a; 何時在StringBuilder上使用StringJoiner 1. StringBuilder Java編譯器對String做了特殊處理&#xff0c;使得我們可以直接用拼接字符串。 雖然可以直接拼接字符串&#xff0c;但是&#xff0c;在循環中&#xff0c;每次循環都會創建新的字符串對象&a…

EMC VMAX的磁盤構成,fast policy(重要)

首先是流程&#xff0c; 不同種類的磁盤&#xff08;sata&#xff0c;fc&#xff0c;flah&#xff09;->disk group->raid->DATA volume->thin pool->TDEV and BCVDEV (lun) 然后細看&#xff1a; 1&#xff09; 不同種類的磁盤叫做disk&#xff0c;這是可見的物…

[轉載] Java反射是什么?看這篇絕對會了!

參考鏈接&#xff1a; Java中的util.Arrays與Reflection.Array的示例 作者&#xff1a;火星十一郎 https://www.cnblogs.com/hxsyl 一.概念 反射就是把Java的各種成分映射成相應的Java類。 Class類的構造方法是private&#xff0c;由JVM創建。 反射是java語言的一個特性…

[精講-3]Offline Domain Join

從windows 2008 ,windows 7開始起就具備脫機加入域的功能,就是它們在未連接DC的情況下,也可以加入域. 假如環境lab.com ,一臺已加入域的PC (WIN7Client) 和即將加入域的PC(win7-2) 在win7client上run下面這個命令 DC已作了一次預先的動作:創建了computer object 在win7-2上,用本…

[轉載] Java——toArray,集合轉換為數組

參考鏈接&#xff1a; 從ArrayList到Java的Array數組轉換&#xff1a;toArray()方法 package day04; import java.util.ArrayList; import java.util.Collection; /** * 集合轉換為數組 * Collection中定義了兩個方法 * Object[] toArray * <T>Y[] toArray(T[] array) …

c#匿名方法

//以下示例和說明都源于《visual c# 2005 技術內幕》 //匿名函數就是沒有名字的函數&#xff0c;是專用于委托的函數。 using System; using System.Collections.Generic; using System.Text; namespace 匿名方法 { public delegate void DelegateClass(); public dele…