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

歡迎訪問 生活随笔!

生活随笔

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

C#

C#高级编程(第9版) 第06章 数组

發(fā)布時間:2024/10/8 C# 118 如意码农
生活随笔 收集整理的這篇文章主要介紹了 C#高级编程(第9版) 第06章 数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
好久沒發(fā)東西了 , 一停下來就會變懶。。。。 雖然沒完成,也就是它吧
--------------------------------- 以下正文 --------------------------------
本章要點
1 簡單數組
2 多維數組
3 鋸齒數組
4 Array類
5 作為參數的數組
6 枚舉
7 元組
8 結構比較
 
同一類型和不同類型的多個對象
如果需要使用同一類型的多個對象,就可以使用集合(參見第10章)和數組。
C#用特殊的記號聲明、初始化、使用數組。
Array類在后臺發(fā)揮作用,它為數組中元素的排序和過濾提供了幾個方法。
使用枚舉器,可以迭代數組中的所有元素。
 
如果需要使用不同類型的對象,可以使用Tuple(元組)類型。
 
簡單數組
 
數組的聲明
首先定義數組中元素的類型,其后是一對空方括號和一個變量名。
 
數組的初始化
數組是引用類型,所以必須給它分配堆上的內存。
為此,應使用new運算符,指定數組中元素的類型和數量來初始化數組的變量。
[*值類型和引用類型請參見第3章]
 
聲明和初始化數組后,變量就引用了n個相應類型的對象,它們位于托管堆上。
在指定了數組的大小后,如果不復制數組中的所有元素,就不能重新設置數組的大小;
如果事先不知道數組中應包含多少個元素,就可以使用集合。
 
還可以使用數組初始化器為數組的每個元素賦值。
int[] myArray = new int[4] {1, 2, 3, 4};
數組初始化器只能在聲明數組變量時使用,不能在聲明數組之后使用。
 
訪問數組元素
使用索引器訪問其中的元素,數組只支持有整形參數的索引器。
 
使用引用類型
必須注意:如果數組中的元素是引用類型,就必須為每個數組元素分配內存。否則會拋出異常NullReferenceException。
 
 
多維數組
一般數組(也稱為一維數組)用一個整數來索引;多維數組用兩個或更多個整數來索引。
在C#中聲明這個二維數組,需要在方括號中加上一個逗號,在初始化時應指定每一維的大小(也稱為階)。
int[ , ] twodim = new int[3, 3]; //數組聲明之后,就不能修改其階數了。
 
鋸齒數組
在鋸齒數組中,每一行都可以有不同的大小。
 
Array類
用方括號聲明數組是C#中使用Array類的表示法。在后臺使用C#語法,會創(chuàng)建一個派生自抽象基類Array的新類。
 
創(chuàng)建數組
Array是一個抽象類,所以不能使用構造函數來創(chuàng)建數組。
除了使用C#語法創(chuàng)建數組實例之外,還可以使用靜態(tài)方法CreateInstance()創(chuàng)建數組。如果事先不知道元素的類型,該靜態(tài)方法就非常有用,因為類型可以作為Type對象傳遞給CreateInstance()方法。
 
Arrray intArray = Array.CreateInstance(typeof(int), 5);
for (int i=0; i<5; i++) {
intArray.SetValue(33, 1); //設置對應元素的值
}
還可以將已創(chuàng)建的數組強制轉換成聲明為int[]的數組;
int[] intArrayCopy = (int[]) intArray;
 
復制數組(克隆數組)
int[] intArrayClone = (int[]) intArray.Clone();
 
排序
Array類使用QuickSort算法對數組中的元素進行排序。
Sort()方法需要數組中的元素實現(xiàn)IComparable接口。 因為簡單類型(如System.String 和 System.Int32)實現(xiàn)IComparable接口,所以可以對包含這些類型的元素排序。
 
eg:
string[] names ={
"Christina Aguilera",
"Shakira",
"Beyonce",
"Lady Gaga"
};
Array.Sort(names);
foreach (var name in names) {
Console.WriteLine(name);
}
 
如果對數組使用自定義類,就必須實現(xiàn)IComparable接口或IComparer<T>接口。
這兩個接口只定義了一個方法CompareTo(),如果要比較的對象相等,該方法就返回0;如果該實例應該排在參數對象的前面,該方法就返回小于0的值,如果排在后面,反之。
eg:
public class Person : IComparable<Person> {
public int CompareTo(Person other) {
if (other == null) return 1;
int result = string.Compare(this.LastName, other.LastName);
if (result == 0) {
result = string.Compare(this.FirstName, other.FirstName);
}
return result;
}
}
 
Array類還提供了Sort方法,它需要講一個委托作為參數。這個參數傳遞給方法,從而比較兩個對象,而不需要依賴IComparable或IComparer接口。
 
數組作為參數
 
數組協(xié)變
數組支持協(xié)變。 這表示數組可以聲明為基類,其派生類型的元素可以賦予數組元素。
數組協(xié)變只能用于引用類型,不能用于值類型。另外,數組協(xié)變有一個問題,它只能通過運行時異常來解決。
 
ArraySegment<T>
該結構表示數組的一段。如果需要使用不同的方法處理某個大型數組的不同部分,那么可以把相應的數組部分復制到各個方法中。此時,與創(chuàng)建多個數組下你個比,更有效的方法是使用一個數組,將整個數組傳遞給不同的方法。這些方法只使用數組的某個部分。方法的參數除了數組以外,還應該包括數組內的偏移量以及該方法應該使用的元素數。這樣一來,方法就需要至少3個參數。當時用數組段時,只需要一個參數就可以了。
 
 
枚舉
在 foreach 語句中使用枚舉,可以迭代集合中的元素,且無須知道集合中的元素個數。
foreach 語句使用了一個枚舉器。
 
數組或結合實現(xiàn)了 帶GetEumerator()方法的 IEumerable 接口。GetEumerator()方法返回一個實現(xiàn) IEumerable 接口的枚舉。接著, foreach 語句就可以使用 IEumerable 接口迭代集合了。
 
IEnumerator接口
foreach 語句使用IEnumerator接口的方法和屬性,迭代集合中的所有元素。
為此,IEnumerator定義了Current屬性,來返回光標所在的元素,該接口的MoveNext()方法移動到集合的下一個元素上,如果有這個元素,該方法就返回true。如果集合不在有更多的元素,該方法就返回false。
 
foreach語句
C#的foreach語句不會解析為IL代碼中的foreach語句。C#編譯器會把foreach語句轉換為IEnumerable接口的方法和屬性。
eg:
foreach (var p in persons) {
Console.WriteLine(p);
}
foreach 語句的解析過程: 首先,調用GetEnumerator()方法,獲得數組的一個枚舉器。在while循環(huán)中 ---------- 只要MoveNext()返回true ---------- 就用Current屬性訪問數組中的元素;
IEnumerator<Person> enumerator = persons.GetEnumerator();
while ( enumerator.MoveNext() ) {
Person p = enumerator.Current;
Console.WriteLine(p);
}
 
yield語句
在C# 1.0中,創(chuàng)建枚舉器仍需要做大量的工作。C# 2.0添加了yield語句,以便于創(chuàng)建枚舉器。yield return語句返回集合的一個元素,并移動到下一個元素上。yield break 可以停止迭代。
eg:
using System;
using System,Collections;
namespace Wrox.ProCSharp.Arrays {
public class HelloCollection {
public IEnumerator<string> GetEnumerator() {
yield return "Hello";
yield return "World";
}
}
}
包含yield語句的方法或屬性也稱為迭代塊。迭代塊必須聲明為返回IEnumerator或IEnumerable接口,或者這些接口的泛型版本。這個塊可以包含多條 yield return 語句或 yield break 語句,但不能包含return語句。
 
現(xiàn)在可以用foreach語句迭代集合了:
public void HelloWorld() {
var helloCollection = new HelloCollection();
foreach (var s in helloCollection) {
Console.WriteLine(s);
}
}
 
yeild語句會生成一個枚舉器,而不僅僅生成一個包含的項的列表,這個枚舉器通過foreach語句調用。從foreach中依次訪問每一項時,就會訪問枚舉器。這樣就可以迭代大量的數據,而無須一次把所有的數據都讀入內存。
 
 
 
【未完懶得寫了。。。。。 有時間再來填坑吧】

總結

以上是生活随笔為你收集整理的C#高级编程(第9版) 第06章 数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本一区三区 | 免费欧美在线 | 6080成人| 日韩一区精品 | 欧美一级欧美三级 | 日日骚av一区二区 | a天堂在线| 性欧美大战久久久久久久 | 免费在线看污 | 精品久久久久亚洲 | av网站在线播放 | 久久精品99国产精品日本 | 中文字幕免费观看 | 久久精品一区 | 精品免费久久久 | 国产偷亚洲偷欧美偷精品 | 性色在线观看 | 久久久精品网 | 香蕉一区二区三区四区 | 国产成人精品国内自产拍免费看 | 欧美激情黄色 | 少妇高潮21p | 毛片日本 | 国产精品一区二区在线 | 黄av网站| 亚洲av成人片无码 | 国产三级日本三级在线播放 | 亚洲自拍小视频 | 亚洲天堂美女视频 | 久插网| 国产专区一| 黄色二级视频 | 久久欧美精品 | 99精品欧美一区二区蜜桃免费 | 国产一级在线观看 | 成人福利午夜 | 欧美看片| 亚洲精品三 | 国产精品久久久久久av | 91亚州| 日韩精品麻豆 | 亚洲一区二区激情 | 色婷婷色| 色屁屁影院www国产高清麻豆 | 亚洲激情综合网 | 国产a国产片国产 | 成人片黄网站久久久免费 | 高清av网站 | 久久久久国产精品熟女影院 | 日韩不卡免费视频 | 欧美日韩国产三区 | 国产精品久久久久不卡 | 在线中文av | 中文字幕一区二区三区乱码在线 | 国产亚洲欧美精品久久久久久 | 成人免费视频免费观看 | 精品一区二三区 | 欧美性受xxxx黑人xyx | 男男肉耽高h彩漫 | 一女二男一黄一片 | 色婷综合| 国产黄色片在线播放 | 超碰资源 | 一区精品二区国产 | 人妻饥渴偷公乱中文字幕 | 国产乱人伦精品一区二区 | 日韩少妇中文字幕 | 日韩欧美一区二区三区四区 | 日韩欧美一区二区三区久久婷婷 | 亚洲精品2区 | 亚洲一区电影网 | 亚洲综合视频网 | 毛片视频软件 | 五月伊人婷婷 | 一级片视频播放 | 国产一区二区三区视频在线播放 | 在线观看亚洲av每日更新 | 国产亚洲精品美女久久久久 | 激情视频网站在线观看 | 黄色天堂 | 色综合亚洲 | 岛国片免费在线观看 | 婷婷深爱激情 | 青青草视频播放器 | 女人扒开腿让男人捅爽 | www.狠狠艹| 日韩精品福利 | 免费视频色 | 亚洲免费视频大全 | 欧美日韩偷拍视频 | 91国产中文字幕 | 欧美少妇色图 | 欧美精品一区二区久久婷婷 | 中国久久 | 91av欧美| 欧美午夜精品一区二区蜜桃 | 91精产国品一二三区在线观看 | 韩日av片 | www毛片|