1. 程式人生 > >c#陣列的操作

c#陣列的操作

陣列是絕大部分變成語言都支援的一種資料型別,無論是C,C++,C#,或是java。陣列是具有相同資料型別的一組資料的集合。例如水果的集合–蘋果,橘子,香蕉等等。在程式設計中將這些集合稱為陣列。陣列中的每一個變數成為陣列的元素,陣列能夠容納元素的數量稱為的陣列的長度。陣列中的每一個元素都有唯一的索引與之對應,索引值從0開始。
陣列作為物件是使用new關鍵字進行記憶體分配,使用陣列之前,必須首先定義陣列變數所屬的型別,一維陣列的建立有兩種方法:
1.先宣告,再用new運算子進行記憶體分配:資料元素型別[]陣列名稱;
陣列名稱=new 陣列元素型別[陣列元素個數];
2.宣告的同時為陣列分配記憶體:陣列元素型別[]陣列名稱=new 陣列元素型別[陣列元素個數];
在c#中,陣列是由System.Arrat類派生而來的引用物件,因此可以使用Array類中的各種方法陣列進行操作,下面分別介紹一下如何對陣列進行元素的新增和刪除。
1.在陣列中新增一個元素:此類新增最為容易,即宣告一個長度比原陣列+1的新陣列(使用Length屬性獲取陣列長度),從而迴圈遍歷新陣列,根據索引新增新值,程式碼如下,通過自定義一個arrayadd方法來實現:

 /// <summary>
        /// 增加單個數組元素
        /// </summary>
        /// <param name="arrayborn">原陣列</param>
        /// <param name="index">新增索引</param>
        /// <param name="value">新增值</param>
        /// <returns></returns>
  static int[] arrayadd(int[] arrayborn,
int index, int value) { if (index >= (arrayborn.Length))//判斷新增的索引值是否大於陣列的長度 index = arrayborn.Length - 1;//設定為最大索引 int[]arraytem=new int[arrayborn.Length+1]; for (int i = 0; i < arraytem.Length; i++) { if (index >=
0)//判斷索引值 { if (i < (index + 1))//判斷遍歷索引小於新增索引值 arraytem[i] = arrayborn[i];//交換元素 else if (i == (index + 1)) arraytem[i] = value;//新增新值 else arraytem[i] = arrayborn[i - 1]; } else { if (i == 0) arraytem[i] = value; else arraytem[i] = arrayborn[i - 1]; } } return arraytem; }

通過對索引值的遍歷,可以將原陣列中的元素新增至新陣列,在新增的索引值處將新元素新增實現對陣列新增單個元素的操作;
2.如何在陣列中新增一個數組?方法與新增單個元素的方法類似,即先宣告一個長度為兩個陣列長度之和的新陣列,還是通過索引的方式遍歷新增,方法程式碼如下:

/// <summary>
        /// 增加單個數組元素
        /// </summary>
        /// <param name="arrayborn">原陣列</param>
        /// <param name="index">新增索引</param>
        /// <param name="add">新增陣列</param>
        /// <returns></returns>
static int[] arrayadd(int[] arrayborn, int[]add,int index)
        {
            if (index >= (arrayborn.Length))//判斷新增的索引值是否大於陣列的長度
                index = arrayborn.Length - 1;//設定為最大索引
            int[]arraytem=new int[arrayborn.Length+add.Length];
            for (int i = 0; i < arraytem.Length; i++)
            {
                if (index >= 0)//判斷索引值
                {
                    if (i < (index + 1))//判斷遍歷索引小於新增索引值
                        arraytem[i] = arrayborn[i];//交換元素
                    else if (i == (index + 1))
                    {
                       for(int j=0;j<add.Length;j++)
                           arraytem[i+j]=add[j];
                        i=i+add.Length-1;
                       }
                    else
                        arraytem[i] = arrayborn[i - add.Length];
                }
                else
                {
                    if (i == 0)
                    {
                        for (int j = 0; j < add.Length; j++)
                            arraytem[i + j] = add[j];
                        i = i + add.Length - 1;
                    }
                    else
                        arraytem[i] = arrayborn[i - add.Length];
                }
            }
            return arraytem;
        }

刪除陣列元素
刪除陣列元素分為兩種情況1.不改變原陣列長度;2.陣列長度減去刪除元素個數,下面分貝通過兩個例項來介紹:
1.不改變陣列長度:即用刪除元素後面的元素來覆蓋刪除的元素,空出的索引處的值用空格替代,程式碼如下:

 /// <summary>
        /// 刪除陣列中的元素
        /// </summary>
        /// <param name="ArrayBorn">要從中刪除元素的陣列</param>
        /// <param name="Index">刪除索引</param>
        /// <param name="Len">刪除的長度</param>
        static void DeleteArray(string[] ArrayBorn, int Index, int Len)
        {
            if (Len <= 0)//判斷刪除長度是否小於等於0
                return;//返回
            if (Index == 0 && Len >= ArrayBorn.Length)//判斷刪除長度是否超出了陣列範圍
                Len = ArrayBorn.Length;//將刪除長度設定為陣列的長度
            else if ((Index + Len) >= ArrayBorn.Length)//判斷刪除索引和長度的和是否超出了陣列範圍
                Len = ArrayBorn.Length - Index - 1;//設定刪除的長度
            int i = 0;//定義一個int變數,用來標識開始遍歷的位置
            for (i = 0; i < ArrayBorn.Length - Index - Len; i++)//遍歷刪除的長度
                ArrayBorn[i + Index] = ArrayBorn[i + Len + Index];//覆蓋要刪除的值
            //遍歷刪除長度後面的陣列元素值
            for (int j = (ArrayBorn.Length - 1); j > (ArrayBorn.Length - Len - 1); j--)
                ArrayBorn[j] = null;//設定陣列為空
        }

2.改變陣列長度,即刪除元素後,根據刪除的長度使刪除後陣列長度減去相應的值,程式碼如下:

/// <summary>
        /// 刪除陣列中的元素,並改變陣列的長度
        /// </summary>
        /// <param name="ArrayBorn">要從中刪除元素的陣列</param>
        /// <param name="Index">刪除索引</param>
        /// <param name="Len">刪除的長度</param>
        /// <returns>得到的新陣列</returns>
        static string[] DeleteArray(string[] ArrayBorn, int Index, int Len)
        {
            if (Len <= 0)//判斷刪除長度是否小於等於0
                return ArrayBorn;//返回源陣列
            if (Index == 0 && Len >= ArrayBorn.Length)//判斷刪除長度是否超出了陣列範圍
                Len = ArrayBorn.Length;//將刪除長度設定為陣列的長度
            else if ((Index + Len) >= ArrayBorn.Length)//判斷刪除索引和長度的和是否超出了陣列範圍
                Len = ArrayBorn.Length - Index - 1;//設定刪除的長度
            string[] temArray = new string[ArrayBorn.Length - Len];//宣告一個新的陣列
            for (int i = 0; i < temArray.Length; i++)//遍歷新陣列
            {
                if (i >= Index)//判斷遍歷索引是否大於等於刪除索引
                    temArray[i] = ArrayBorn[i + Len];//為遍歷到的索引元素賦值
                else
                    temArray[i] = ArrayBorn[i];//為遍歷到的索引元素賦值
            }
            return temArray;//返回得到的新陣列
        }