ホームページ  >  記事  >  バックエンド開発  >  C#基礎知識編:基礎知識(14)配列

C#基礎知識編:基礎知識(14)配列

黄舟
黄舟オリジナル
2017-02-11 13:34:441313ブラウズ

どの言語であっても、集合の概念は必ず存在します。最も単純で直感的なコレクションは配列です。配列はメモリ内の連続した空間です。 C# の配列

の定義を見てください。
1. int[] intArry;
intArry= new int[6];
ここで int 配列型変数 intArry が宣言され、6 単位の int 配列オブジェクトが保存されます;
int[,] intArry2 = new int[ 3, 4];
int の 2 次元配列型変数を宣言し、3 行 4 列の配列オブジェクトを初期化します
int[][] intArry3 = new int[9][];
配列単位を int 配列として宣言します。型配列変数。各配列要素は int 配列型のオブジェクト参照です。
オブジェクト指向言語であるため、参照とオブジェクトについては上で説明しました。実際:
1. .net Framework の配列は単純なデータ構造ではなく、配列型と呼ばれる型です。
2. .net Framework の配列変数は、配列型オブジェクトへの参照を格納します。つまり、配列は物体。
すべての .net Framework 配列 (int[]、string[]、object[]) は Array から継承されたサブクラスです。通常、Array クラスは直接使用されません。これは、C# を含む .net Framework のさまざまな言語が、配列オブジェクトを int[]、string[] などの独自の特別な構文にマップするためです。

配列には主にインデックスと長さの 2 つの属性があります。つまり、インデックスは配列オブジェクト内の要素にアクセスするために使用され、長さは配列の長さです。

連絡先コードの一部を見てみましょう:

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();
        }

    }

Call

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

            Console.ReadLine();
        }
    }

Result


上記のことから、次のことがわかります: 配列には参照型配列と値型配列がある 参照型配列の場合、要素は保存に使用されます。オブジェクトへの参照と値の初期化。値型配列の場合、要素は

オブジェクトの値を格納し、数値型の場合、初期値は 0 です。

配列には次元がありますが、多次元配列と配列の配列は異なる概念であり、intArrayArray と intArray2D は異なります。配列の配列は m*n 行列式


を表し、多次元配列は各要素が配列オブジェクトである配列です。

配列は、他のコレクション クラスと同様に、ICollection インターフェイスを実装し、列挙関数と反復関数を備えています。


上記は C# の基礎知識をまとめたものです: 基礎知識 (14) 配列の内容 その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。