C# 的數組定義,訪問,及相關方法匯總(學習心得 14)

一個存儲相同類型元素的固定大小順序集合。

一、聲明數組

語法:

datatype[] arrayName;

參數:

  • datatype:元素的數據類型
  • []:表示數組(這裡不能填寫數組大小!)
  • arrayName:數組名稱

例:

double[] balance;

二、初始化數組

數組是一個引用類型

需要使用 new 關鍵詞來創建數組實例,以達到初始化。

例:

double[] balance = new double[10];

三、數組賦值

創建一個數組時,C# 編譯器會根據數組類型隱式初始化每個數組元素為一個默認值。

例如,int 數組的所有元素都會被初始化為 0。

3.1 初始化後,利用索引賦值

例:

double[] balance = new double[10];
balance[0] = 4500.0;

3.2 聲明的同時賦值

這裡用大括弧。

例:

double[] balance = { 2340.0, 4523.69, 3421.0};

3.3 初始化的同時賦值

例:

int [] marks = new int[5]  { 99,  98, 92, 97, 95};

3.4 省略數組大小

例:

int [] marks = new int[]  { 99,  98, 92, 97, 95};

3.5 把一個數組賦值給另一個數組

例:

int [] marks = new int[]  { 99,  98, 92, 97, 95};
int[] score = marks;

四、訪問數組元素

索引從 0 開始。

例:

double salary = balance[9];

4.1 for 循環訪問

例:綜合聲明,賦值,訪問

using System;
namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         int []  n = new int[10]; // 初始化 n 是一個帶有 10 個整數的數組
         int i,j;


         // 賦值
         for ( i = 0; i < 10; i++ )
         {
            n[ i ] = i + 100;
         }

         // 訪問
         for (j = 0; j < 10; j++ )
         {
            Console.WriteLine("Element[{0}] = {1}", j, n[j]);
         }
         Console.ReadKey();
      }
   }
}

運行結果:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

4.2 foreach 循環訪問

這樣的訪問方式不需要知道數組長度。

例:

using System;

namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         int []  n = new int[10]; 
   
         for ( int i = 0; i < 10; i++ )
         {
            n[i] = i + 100;
         }

         // 訪問每一個元素
         foreach (int j in n )
         {
            int i = j-100;
            Console.WriteLine("Element[{0}] = {1}", i, j);
         }
         Console.ReadKey();
      }
   }
}

運行結果:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

五、數組的重要細節

5.1 多維數組

二維數組:

string [,] names;

三維數組:

int [ , , ] m;

5.1.1 初始化二維數組

例:

int [,] a = new int [3,4] {
 {0, 1, 2, 3} ,   //  初始化索引號為 0 的行
 {4, 5, 6, 7} ,   //  初始化索引號為 1 的行
 {8, 9, 10, 11}   //  初始化索引號為 2 的行
};

2 層大括弧。

第一層表示第一個維度,第二層表示第二個維度。

5.1.2 訪問二維數組元素

表示方法:

int val = a[2,3];

例:

using System;

namespace ArrayApplication
{
    class MyArray
    {
        static void Main(string[] args)
        {
            // 賦值 5 行 2 列的數組
            int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };

            int i, j;

            /* 輸出數組中每個元素的值 */
            for (i = 0; i < 5; i++)
            {
                for (j = 0; j < 2; j++)
                {
                    Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i,j]);
                }
            }
           Console.ReadKey();
        }
    }
}

運行結果:

a[0,0]: 0
a[0,1]: 0
a[1,0]: 1
a[1,1]: 2
a[2,0]: 2
a[2,1]: 4
a[3,0]: 3
a[3,1]: 6
a[4,0]: 4
a[4,1]: 8

5.2 交錯數組

數組的元素也是數組。

聲明方法:

int [][] scores;

初始化並賦值:

int[][] scores = new int[2][]{new int[]{92,93,94},new int[]{85,66,87,88}};

scores 是一個由兩個整型數組組成的數組。

scores[0] 是一個帶有 3 個整數的數組。

scores[1] 是一個帶有 4 個整數的數組。

例:

using System;

namespace ArrayApplication
{
    class MyArray
    {
        static void Main(string[] args)
        {
            // 建立 5 個整型數組組成的交錯數組
            int[][] a = new int[][]{new int[]{0,0},new int[]{1,2},
            new int[]{2,4},new int[]{ 3, 6 }, new int[]{ 4, 8 } };

            int i, j;

            /* 輸出數組中每個元素的值 */
            for (i = 0; i < 5; i++)
            {
                for (j = 0; j < 2; j++)
                {
                    Console.WriteLine("a[{0}][{1}] = {2}", i, j, a[i][j]);
                }
            }
           Console.ReadKey();
        }
    }
}

運行結果:

a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8

5.3 傳遞數組給函數

過指定不帶索引的數組名稱,來給函數傳遞一個指向數組的指針。

例:

using System;

namespace ArrayApplication
{
   class MyArray
   {
      double getAverage(int[] arr, int size)
      {
         int i;
         double avg;
         int sum = 0;

         for (i = 0; i < size; ++i)
         {
            sum += arr[i];
         }

         avg = (double)sum / size;
         return avg;
      }
     
      static void Main(string[] args)
      {
         MyArray app = new MyArray();
         // 有 5 個元素的 int 數組
         int [] balance = new int[]{1000, 2, 3, 17, 50};
         double avg;

         // 傳遞數組的指針作為參數
         avg = app.getAverage(balance, 5 ) ;

         // 輸出返回值
         Console.WriteLine( "平均值是: {0} ", avg );
         Console.ReadKey();
      }
   }
}

運行結果:

平均值是: 214.4

5.4 參數數組

參數數組,通常用於傳遞 未知數量 的參數給函數。

這裡使用 params 關鍵字:

public 返回類型 方法名稱( params 類型名稱[] 數組名稱 )

例:

using System;

namespace ArrayApplication
{
   class ParamArray
   {
      public int AddElements(params int[] arr)
      {
         int sum = 0;
         foreach (int i in arr)
         {
            sum += i;
         }
         return sum;
      }
   }
     
   class TestClass
   {
      static void Main(string[] args)
      {
         ParamArray app = new ParamArray();
         int sum = app.AddElements(512, 720, 250, 567, 889);
        // 相當於把 512, 720, 250, 567, 889 這 5 個參數傳遞給 int[] arr 這個數組
         Console.WriteLine("總和是: {0}", sum);
         Console.ReadKey();
      }
   }
}

運行結果:

總和是: 2938

5.5 數組 Array 類的屬性和方法

Array 類是 C# 中所有數組的基類,它是在 System 命名空間中定義。

5.5.1 Array 類的屬性

常用屬性:

序號 屬性 & 描述
1 IsFixedSize 獲取一個值,該值指示數組是否帶有固定大小。
2 IsReadOnly 獲取一個值,該值指示數組是否只讀。
3 Length 獲取一個 32 位整數,該值表示所有維度的數組中的元素總數。
4 LongLength 獲取一個 64 位整數,該值表示所有維度的數組中的元素總數。
5 Rank 獲取數組的秩(維度)。

5.5.2 Array 類的方法

常用方法:

序號 方法 & 描述
1 Clear 根據元素的類型,設置數組中某個範圍的元素為零、為 false 或者為 null。
2 Copy(Array, Array, Int32) 從數組的第一個元素開始複製某個範圍的元素到另一個數組的第一個元素位置。長度由一個 32 位整數指定。
3 CopyTo(Array, Int32) 從當前的一維數組中複製所有的元素到一個指定的一維數組的指定索引位置。索引由一個 32 位整數指定。
4 GetLength 獲取一個 32 位整數,該值表示指定維度的數組中的元素總數。
5 GetLongLength 獲取一個 64 位整數,該值表示指定維度的數組中的元素總數。
6 GetLowerBound 獲取數組中指定維度的下界。
7 GetType 獲取當前實例的類型。從對象(Object)繼承。
8 GetUpperBound 獲取數組中指定維度的上界。
9 GetValue(Int32) 獲取一維數組中指定位置的值。索引由一個 32 位整數指定。
10 IndexOf(Array, Object) 搜索指定的對象,返回整個一維數組中第一次出現的索引。
11 Reverse(Array) 逆轉整個一維數組中元素的順序。
12 SetValue(Object, Int32) 給一維數組中指定位置的元素設置值。索引由一個 32 位整數指定。
13 Sort(Array) 使用數組的每個元素的 IComparable 實現來排序整個一維數組中的元素。
14 ToString 返回一個表示當前對象的字元串。從對象(Object)繼承。

例:

using System;
namespace ArrayApplication
{
    class MyArray
    {
       
        static void Main(string[] args)
        {
            int[] list = { 34, 72, 13, 44, 25, 30, 10 };

            Console.Write("原始數組: ");
            foreach (int i in list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
           
            // 逆轉數組
            Array.Reverse(list);
            Console.Write("逆轉數組: ");
            foreach (int i in list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
           
            // 排序數組
            Array.Sort(list);
            Console.Write("排序數組: ");
            foreach (int i in list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();

           Console.ReadKey();
        }
    }
}

運行結果:

原始數組: 34 72 13 44 25 30 10
逆轉數組: 10 30 25 44 13 72 34
排序數組: 10 13 25 30 34 44 72
Tags: