学习的回顾--数组的有关内容
1、數組的定義以及簡單的內容
C#中數組是引用類型,C#定義整型數組方式是:int [] intArray = {1,2,3};或int [] intArray = new int[10];
C#中的數組可以是一維的也可以是多維的,同樣也支持矩陣和參差不齊的數組。注意:定義多維數組(矩陣)的方式是[,,]而定義多維“參差矩陣”的方式是[][]。另外,new關鍵字的使用并不一定表示對象是動態分配的(進入棧中)。
下面是C#中(一維)多維數組常見的定義方式:
int []a1;?? //定義一維數組
int [,]a2;? //定義二維數組
int [,,]a3; //定義三維數組
int []a1 = new int [10];?????? //定義一維數組深度
int [,]a2 = new int [10,20];???? //定義二維數組深度
int [,,]a3 = new int [10,20,30]; //定義三位數組深度
int []a1 = new int []{1,2,3};?????? //初始化
int [,]a2 = new int [,]{{1,2,3},{4,5,6}};
還可以定義“參差不齊”的數組:
int [][]var = new int [3][];
var[0] = new int[]{1,2,3};
var[1] = new int[]{1,2,3,4,5,6};
var[2] = new int[]{1,2,3,4,5,6,7,8,9};
注意,int [,]a和int [][]a的區別:前者定義了一個二維固定數組,后者定義了一個二維可變數組。只是它們都還沒被分配空間和初始化。
2、下面我就舉一些關于數組的內容:
#region 找出一組整數中最大的那個
??????????? /*int[] numbs = { 1,4,3,12,6,5};
??????????? int maxvalue = numbs[0];
??????????? for (int i = 0; i < numbs.Length; i++)
??????????? {
??????????????? if (numbs[i]>maxvalue)
??????????????? {
??????????????????? maxvalue = numbs[i];
??????????????? }
??????????? }
??????????? Console.WriteLine(maxvalue);*/
??????????? #endregion
??????????? #region 求一組整數的和
??????????? /*int[] numbs = { 1, 4, 3, 12, 6, 5 };
??????????? int sum = 0;
??????????? for (int i = 0; i < numbs.Length; i++)
??????????? {
??????????????? sum = sum + numbs[i];
??????????? }
??????????? Console.WriteLine(sum);*/
??????????? #endregion
??????????? #region 講一個字符串數組輸出為|分割的形式
??????????? /*string[] strs = { "a","b","c","d"};
??????????? string str = string.Empty;
??????????? for (int i = 0; i < strs.Length; i++)
??????????? {
??????????????? str = str + strs[i] + "|";
??????????? }
??????????? Console.WriteLine(str.TrimEnd('|'));*/
??????????? #endregion
??????????? #region 將兩個Int類型數組連接為一個string類型數組
??????????? /*int[] numb1 = { 1, 2, 3, 4, 5 };
??????????? int[] numb2 = { 6, 7, 8, 9, 10 };
??????????? //聲明一個string類型的數組
??????????? string[] strs=new string[numb1.Length+numb2.Length];
??????????? //便利numb1數組,將每個元素轉換成string類型,添加到字符串數組中
??????????? for (int i = 0; i < numb1.Length; i++)
??????????? {
??????????????? strs[i] =Convert.ToString(numb1[i]);
??????????? }
??????????? //便利Numb2數組,將每一個元素轉換成string類型,添加到字符串數組中
??????????? for (int i = 0; i < numb2.Length; i++)
??????????? {
??????????????? strs[i + numb1.Length] = Convert.ToString(numb2[i]);
??????????? }
??????????? foreach (string item in strs)
??????????? {
??????????????? Console.Write(item+",");
??????????? }*/
??????????? #endregion
??????????? #region 有一個整數數組,請聲明一個字符串數組,將整數數組中的每一個元素的值轉換為字符串保存到字符串數組中
??????????? /*int[] numb1 = { 1, 2, 3, 4, 5 };
??????????? string[] strs = new string[numb1.Length];
??????????? for (int i = 0; i < numb1.Length; i++)
??????????? {
??????????????? strs[i] = Convert.ToString(numb1[i]);
??????????? }
??????????? foreach (string item in strs)
??????????? {
??????????????? Console.Write(item + ",");
??????????? }*/
??????????? #endregion
??????????? #region 將一個字符串數組的元素的順序進行反轉
??????????? string[] strs = { "a", "b", "c", "d", "e", "f" };
??????????? string temp = string.Empty;
??????????? for (int i = 0; i < strs.Length/2; i++)
??????????? {
??????????????? temp = strs[i];
??????????????? strs[i] = strs[strs.Length - 1 - i];
??????????????? strs[strs.Length - 1 - i] = temp;
??????????? }
??????????? foreach (string item in strs)
??????????? {
??????????????? Console.Write(item+",");
??????????? }
??????????? #endregion
??????????? Console.ReadKey();
?
3、C#中數組、ArrayList和List三者的區別
?在C#中數組,ArrayList,List都能夠存儲一組對象,那么這三者到底有什么樣的區別呢。
數組
??? 數組在C#中最早出現的。在內存中是連續存儲的,所以它的索引速度非常快,而且賦值與修改元素也很簡單。
[csharp]
<span style="font-family:SimSun;font-size:18px;">//數組?
string[] s=new string[2];?
?
//賦值?
s[0]="a";?
s[1]="b";?
//修改?
s[1]="a1";?
</span>?
?
??? 但是數組存在一些不足的地方。在數組的兩個數據間插入數據是很麻煩的,而且在聲明數組的時候必須指定數組的長度,數組的長度過長,會造成內存浪費,過段會造成數據溢出的錯誤。如果在聲明數組時我們不清楚數組的長度,就會變得很麻煩。
??? 針對數組的這些缺點,C#中最先提供了ArrayList對象來克服這些缺點。
ArrayList
??? ArrayList是命名空間System.Collections下的一部分,在使用該類時必須進行引用,同時繼承了IList接口,提供了數據存儲和檢索。ArrayList對象的大小是按照其中存儲的數據來動態擴充與收縮的。所以,在聲明ArrayList對象時并不需要指定它的長度。
[csharp]?
<span style="font-family:SimSun;font-size:18px;">//ArrayList?
ArrayList list1 = new ArrayList();?
?
//新增數據?
list1.Add("cde");?
list1.Add(5678);?
?
//修改數據?
list[2] = 34;?
?
//移除數據?
list.RemoveAt(0);?
?
//插入數據?
list.Insert(0, "qwe");?
</span>?
??? 從上面例子看,ArrayList好像是解決了數組中所有的缺點,為什么又會有List?
??? 我們從上面的例子看,在List中,我們不僅插入了字符串cde,而且插入了數字5678。這樣在ArrayList中插入不同類型的數據是允許的。因為ArrayList會把所有插入其中的數據當作為object類型來處理,在我們使用ArrayList處理數據時,很可能會報類型不匹配的錯誤,也就是ArrayList不是類型安全的。在存儲或檢索值類型時通常發生裝箱和取消裝箱操作,帶來很大的性能耗損。
??? 裝箱與拆箱的概念:
??? 簡單的說:
??? 裝箱:就是將值類型的數據打包到引用類型的實例中
??? 比如將string類型的值abc賦給object對象obj
[csharp]
<span style="font-family:SimSun;font-size:18px;">String? i=”abc”;?
object obj=(object)i;?
</span>?
??? 拆箱:就是從引用數據中提取值類型
??? 比如將object對象obj的值賦給string類型的變量i
[csharp]?
<span style="font-family:SimSun;font-size:18px;">object obj=”abc”;?
string i=(string)obj;?
</span>?
?
??? 裝箱與拆箱的過程是很損耗性能的。
泛型List
??? 因為ArrayList存在不安全類型與裝箱拆箱的缺點,所以出現了泛型的概念。List類是ArrayList類的泛型等效類,它的大部分用法都與ArrayList相似,因為List類也繼承了IList接口。最關鍵的區別在于,在聲明List集合時,我們同時需要為其聲明List集合內數據的對象類型。
比如:
[csharp]?
<span style="font-family:SimSun;font-size:18px;">List<string> list = new List<string>();?
?
//新增數據?
list.Add(“abc”);?
?
//修改數據?
list[0] = “def”;?
?
//移除數據?
list.RemoveAt(0);?
</span>?
?
??? 上例中,如果我們往List集合中插入int數組123,IDE就會報錯,且不能通過編譯。這樣就避免了前面講的類型安全問題與裝箱拆箱的性能問題了。
總結:
??? 數組的容量是固定的,您只能一次獲取或設置一個元素的值,而ArrayList或List<T>的容量可根據需要自動擴充、修改、刪除或插入數據。
??? 數組可以具有多個維度,而 ArrayList或 List< T> 始終只具有一個維度。但是,您可以輕松創建數組列表或列表的列表。特定類型(Object 除外)的數組 的性能優于 ArrayList的性能。 這是因為 ArrayList的元素屬于 Object 類型;所以在存儲或檢索值類型時通常發生裝箱和取消裝箱操作。不過,在不需要重新分配時(即最初的容量十分接近列表的最大容量),List< T> 的性能與同類型的數組十分相近。
??? 在決定使用 List<T> 還是使用ArrayList 類(兩者具有類似的功能)時,記住List<T> 類在大多數情況下執行得更好并且是類型安全的。如果對List< T> 類的類型T 使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型T使用值類型,則需要考慮實現和裝箱問題。
4、我是參考了大神們的復制才弄出來的,
C#中數組復制的4種方法
? 方法一:使用for循環
??????? int []pins = {9,3,7,2}
??????? int []copy = new int[pins.length];
??????? for(int i =0;i!=copy.length;i++)
??????? {
?????????? copy[i] = pins[i];
???????? }
??? 方法二:使用數組對象中的CopyTo()方法
??????? int []pins = {9,3,7,2}
??????? int []copy2 = new int[pins.length];
??????? pins.CopyTo(copy2,0);
??? 方法三:使用Array類的一個靜態方法Copy()
??????? int []pins = {9,3,7,2}
??????? int []copy3 = new int[pins.length];
??????? Array.Copy(pins,copy3,copy.Length);
??? 方法四:使用Array類中的一個實例方法Clone(),可以一次調用,最方便,但是Clone()方法返回的是一個對象,所以要強制轉換成恰當的類類型。
??????? int []pins = {9,3,7,2}
??????? int []copy4 = (int [])pins.Clone();
?
?
總結
以上是生活随笔為你收集整理的学习的回顾--数组的有关内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据仓库入门(实验10)在Excel中查
- 下一篇: fatal error C1010: u