封裝一個數組類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;


namespace 封裝數組類
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList alist = new ArrayList();
            alist.Add(1);
            alist.Add(2);
            //alist.RemoveAt(3);
            //Console.WriteLine(alist[3]);


            MyArrayList<string> myL = new MyArrayList<string>(9);
            myL[0] = "12";
            myL[1] = "2";
            myL[2] = "13";
            myL[3] = "21";
            myL[4] = "e";
            myL[5] = "b";
            myL[6] = "a";
            myL[7] = "e";
            myL[8] = "a";


            #region 測試
            //myL.UnShift(3);
            //myL.Push(4);
            //myL.Shift();
            //myL.Pop();
            //int index = myL.IndexOf(3,4);
            //Console.WriteLine("搜尋的下標爲:{0}",index);
            //index = myL.LastIndexOf(3);
            //Console.WriteLine("搜尋的下標爲:{0}", index);
            //myL.Splice(1, 1);
            //for (int i = 0; i < myL.Len; i++)
            //{
            //    Console.WriteLine(myL[i]);
            //}
            #endregion


            //myL.UnShift(9);
            //int[] a = { 9, 9, 9, 9 };
            //myL.Concat(a);
            //myL.Reverse();
            //myL.Repeat(1, 89);
            myL.Sort();
            //myL.Repeat("a","as");


            for (int i = 0; i < myL.Len; i++)
            {
                Console.WriteLine(myL[i]);
            }
            Console.ReadKey();
        }
    }
    class MyArrayList<T>
    {
        T[] arr = null; //數組
        T[] brr = null; //中間數組
        int len = 0; //數組長度


        //構造函數
        public MyArrayList(int i)
        {
            len = i;  //通過構造函數定義容器長度
            arr = new T[len];
        }


        //數組長度的屬性
        public int Len
        {
            get { return len; }
        }


        //索引器
        public T this[int index]
        {
            get { return arr[index]; }
            set { arr[index] = value; }
        }


        //在數組首位添加一個新的元素
        public void UnShift(T t)
        {
            brr = new T[len];
            brr = arr;
            arr = new T[len + 1];
            arr[0] = t;
            for (int i = 0; i < len; i++)
            {
                arr[i + 1] = brr[i];
            }
            len = arr.Length;
            brr = null;
        }


        //在數組尾部添加一個新的元素
        public void Push(T t)
        {
            brr = new T[len];
            brr = arr;
            arr = new T[len + 1];
            arr[arr.Length-1] = t;
            for (int i = 0; i < len; i++)
            {
                arr[i] = brr[i];
            }
            len = arr.Length;
            brr = null;
        }
        //刪除首位的第一個元素並返回元素
        public T Shift()
        {
            brr = new T[len];
            brr = arr;
            arr = new T[len - 1];
            T firstElement = brr[0];
            for (int i = 0; i < len - 1; i++)
            {
                arr[i] = brr[i + 1];
            }
            len = arr.Length;
            brr = null;
            return firstElement;
        }
        //刪除尾部最後一個元素並返回
        public T Pop()
        {
            brr = new T[len];
            brr = arr;
            arr = new T[len - 1];
            T lastElement = brr[len-1];
            for (int i = 0; i < len - 1; i++)
            {
                arr[i] = brr[i];
            }
            len = arr.Length;
            brr = null;
            return lastElement;
        }
        //splice(開始添加或刪除的下標,刪除的個數,添加的元素)
        public void Splice(int IOindex, int IOcount)
        {
            int index = IOindex;
            int count = IOcount;


            //Console.WriteLine("t = {0}", add);
            brr = new T[len];
            brr = arr;
            arr = new T[len - count];
            //i是原來數組的索引,j是新數組的索引
            for (int i = 0, j = 0; i < len; i++, j++)
            {
                if (j == index)
                {
                    i = i + count;
                }
                arr[j] = brr[i];
            }
            len = arr.Length;
            brr = null;
        }
        public void Splice(int IOindex, int IOcount, params T[] a)
        {
            int index = IOindex;
            int count = IOcount;
            T[] add = a;


            //Console.WriteLine("t = {0}", add);
            brr = new T[len];
            brr = arr;
            arr = new T[len - count + add.Length];
            //i是原來數組的索引,j是新數組的索引
            for (int i = 0, j = 0; i < len; i++, j++)
            {
                if (j == index)
                {
                    for (int k = 0; k < add.Length; k++)
                    {
                        arr[j] = add[k];
                        j++;
                    }
                    j--;
                    i = i + count - 1;
                }
                else
                {
                    arr[j] = brr[i];
                }
            }
            len = arr.Length;
            brr = null;
        }
        //IndexOf(要查詢的元素);IndexOf(要查詢的元素,開始查詢的下標);LastIndexOf(要查詢的元素)
        public int IndexOf(T t)
        {
            int index = -1;
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i].Equals(t))
                {
                    index = i;
                    break;
                }
            }
            return index;
        }
        public int IndexOf(T t, int IOindex)
        {
            int index = -1;
            for (int i = IOindex; i < arr.Length; i++)
            {
                if (arr[i].Equals(t))
                {
                    index = i;
                    break;
                }
            }
            return index;
        }
        public int LastIndexOf(T t)
        {
            int index = -1;
            for (int i = arr.Length - 1; i >= 0; i--)
            {
                if (arr[i].Equals(t))
                {
                    index = i;
                    break;
                }
            }
            return index;
        }
        //concat()把新數組連接到老數組的後面
        public void Concat(T[] t)
        {
            brr = new T[len];
            brr = arr;
            arr = new T[len + t.Length];
            for (int i = 0; i < len; i++)
            {
                arr[i] = brr[i];
            }
            for (int i = len, j = 0; i < arr.Length; i++, j++)
            {
                arr[i] = t[j];
            }
            len = arr.Length;
            brr = null;
        }
        //reverse()倒序
        public void Reverse()
        {
            brr = new T[len];
            brr = arr;
            arr = new T[len];
            for (int i = 0; i < len; i++)
            {
                arr[len - i - 1] = brr[i];
            }
            brr = null;
        }
        //sort()按順序從小到大
        #region
        //public void Sort()
        //{
        //    brr = new T[len];
        //    brr = arr;
        //    arr = new T[len];


        //    for (int i = 0; i < len; i++)
        //    {
        //        T tMin = brr.Min(); //原數組最小元素
        //        arr[i] = tMin;      //最小元素賦給新數組
                
        //        //原數組減去最小元素


        //            //最小元素的位置
        //        int index = 0;
        //        for (int z = 0; z < brr.Length; z++)
        //        {
        //            if (brr[z].Equals(tMin))
        //            {
        //                index = z;
        //                break;
        //            }
        //        }
        //            //去除最小元素 形成新數組
        //        T[] crr = brr;
        //        brr = new T[brr.Length - 1];
        //        for (int j = 0, k = 0; j < brr.Length; j++, k++) {
        //            if (j == index) {
        //                k++;
        //            }
        //            brr[j] = crr[k];
        //        }
        //    }
        //    brr = null;
        //}
        #endregion
        public void Sort() {
            for (int i = 0; i < arr.Length; i++) {
                for (int j = 0; j < i; j++) {
                    if (arr[i].ToString().CompareTo(arr[j].ToString())<0)
                    {
                        T temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
        }
       
        //repeat(int i, T value);修改 repeat(T oldvalue,T newvalue)
        public void Repeat(int IOindex, T value)
        {
            arr[IOindex] = value;
        }
        public void Repeat(T oldvalue, T newvalue)
        {
            int index = IndexOf(oldvalue);
            if (index != null)
            {
                arr[index] = newvalue;
            }
        }
    }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章