C#基礎知識整理:基礎知識(14) 數組

黄舟
發布: 2017-02-11 13:34:44
原創
1365 人瀏覽過

無論哪種語言,一定會有集合的概念。而最簡單,最直覺的集合應該就是數組了,數組是在記憶體中連續的一段空間。看看C#中數組

的定義。
1、int[] intArry ;
 intArry= new int[6];
 這裡宣告了一個int數組類型變數intArry,並保存一個具有6個單元的int數組物件;
 int[,] intArry2 = new int[ 3, 4];
 宣告一個int二維數組類型變量,並初始化一個3行4列的數組物件;
 int[][] intArry3 = new int[9][];
 宣告一個數組單元為int數組類型的數組變量,每個數組元素是一個int數組類型的物件參考。
 因為是物件導向語言,上面提到了引用和物件。其實:
 1、.net Frameword數組不是一種單純的資料結構,而是一個類型,叫做數組類型;
 2、.net Framework中的數組變數保存著引用到數組類型物件的引用,也就是說數組是一個對象。
所有.net Framework數組(int[],string[],object[])都是從Array繼承的子類別。一般不直接使用Array類,因為.net Framework下

的各類語言,當然也包括C#,將陣列物件映射為各自的特殊語法了,例如int[],string[]。
數組主要有兩個各屬性:索引和長度,也就是index和length,索引用來存取數組物件中的元素,長度也就是數組的長度。
看一段聯繫代碼:

public class MyArray
    {
        /// <summary>
        /// 定义数组测试
        /// </summary>
        public void TestInt()
        {
            int[] intArry1 = null;

            intArry1 = new int[6];

            int[,] intArry2 = new int[3, 4];

            int[][] intArry3 = new int[9][];
        }
        
        /// <summary>
        /// 值类型数组转引用类型数组测试
        /// </summary>
        /// <param name="array"></param>
        /// <returns></returns>
        public static object[] Int32ToArrayOfObject(int[] array)
        {
            object[] objArray = new object[array.Length];

            for (int i = 0; i < array.Length; i++)
            {
                objArray[i] = array[i];
            }

            return objArray;
        }
        /// <summary>
        /// 数组的主要特性测试
        /// </summary>
        public static void MainTest()
        {
            //声明一个包含是个元素的字符串型数组
            string[] sArray = new string[10];
            //访问数组
            //赋值
            for (int i = 0; i < sArray.Length; i++)
            {
                sArray[i] = @"string" + i;
            }

            ConsoleToClientString(sArray);

            //另一种方式声明数组,所谓的枚举法
            sArray = new string[] { "TestString0", "TestString1", "TestString2" };

            ConsoleToClientString(sArray);

            //数组复制
            string[] newSArray = sArray.Clone() as string[];

            ConsoleToClientString(newSArray);

            //使用Array的CreateInstance方法声明10元素的整形数组
            int[] intArray = Array.CreateInstance(typeof(int), 10) as int[];

            for (int i = 0; i < intArray.Length; i++)
            {
                intArray[i] = i;
            }

            ConsoleToClientInt(intArray);

            //数组之间的复制,指定位置,指定长度
            int[] newIntArray = new int[20];

            Array.Copy(intArray, 3, newIntArray, 4, intArray.Length - 3);

            ConsoleToClientInt(newIntArray);

            object[] objArray = sArray;

            ConsoleToClientObject(objArray);

            objArray = Int32ToArrayOfObject(intArray);

            ConsoleToClientObject(objArray);

            //数组的数组
            int[][] intArrayArray = new int[9][];

            Console.WriteLine("数组长度:" + intArrayArray.Length);

            //赋值
            for (int i = 1; i < 10; i++)
            {
                intArrayArray[i - 1] = new int[i];

                for (int j = 1; j <= i; j++)
                {
                    intArrayArray[i - 1][j - 1] = i * j;
                }
            }

            ConsoleToClientArrayArrayInt(intArrayArray);
            
            //二维数组
            int[,] intArray2D = new int[9, 9];

            Console.WriteLine(string.Format("二维数组 长度:{0},维数:{1}*{2}", intArray2D.Length, 

intArray2D.GetLength(0), intArray2D.GetLength(1)));

            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    intArray2D[i - 1, j - 1] = i * j;
                }
            }

            int count = 0;

            foreach (int item in intArray2D)
            {
                if (item > 0)
                {
                    Console.Write("{0,2}", item);
                }

                if (++count >= 9)
                {
                    Console.WriteLine();

                    count = 0;
                }
            }
        }

        static void ConsoleToClientArrayArrayInt(int[][] intArrayArray)
        {
            foreach (int[] item1 in intArrayArray)
            {
                foreach (int item2 in item1)
                {
                    Console.Write("{0,2}", item2);
                }

                Console.WriteLine();
            }

            Console.WriteLine();
        }

        static void ConsoleToClientString(string[] sArray)
        {
            foreach (string item in sArray)
            {
                Console.Write(item + @",");
            }

            Console.WriteLine();
        }

        static void ConsoleToClientInt(int[] intArray)
        {
            foreach (int item in intArray)
            {
                Console.Write(item + @",");
            }

            Console.WriteLine();
        }

        static void ConsoleToClientObject(object[] objArray)
        {
            foreach (object item in objArray)
            {
                Console.Write(item.ToString() + @",");
            }

            Console.WriteLine();
        }

    }
登入後複製

呼叫

    class Program
    {
        static void Main(string[] args)
        {
            MyArray.MainTest();

            Console.ReadLine();
        }
    }
登入後複製


結果


由上可以知道:
數組有引用型別引用組和值型數組,對於引用型別數組,元素用來初始化物件的陣列,元素用來初始化物件的數字為null;對於值型別數組,元素保存

物件的值,對於數字型別初始化值為0。
數組有維度,但是多維數組和數組的數組是不同的概念,intArrayArray和intArray2D是不同的。數組的數組表示一個m*n的行列式

,多維數組則是每個元素都是數組物件的數組。
數組和其他集合類別一樣都是實作了ICollection接口,都具有枚舉和迭代功能。

以上就是C#基礎知識整理:基礎知識(14) 陣列的內容,更多相關內容請關注PHP中文網(www.php.cn)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!