1. 程式人生 > >c#多維陣列的建立及操作 總結

c#多維陣列的建立及操作 總結

1C#如何定義和使用多維陣列

不建議使用ArrayList,當數組裡的元素是值型別在操作的時候會出現大量的裝箱與拆箱步驟效能會損失許多,而是應該用什麼型別的元素建立什麼型別的陣列,除非你的元素有交叉或不確定才考慮採用ArrayList。


多維陣列定義如下:
陣列可以具有多個維度。例如,下列宣告建立一個四行兩列的二維陣列:
C#

int[,]array = new int[4, 2];

另外,下列宣告建立一個三維(4、2 和 3)陣列:
C#

int[,,] array1 = new int[4, 2, 3];

陣列初始化
可以在宣告陣列時將其初始化,如下例所示:
C#

int[,]array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
也可以初始化陣列但不指定級別:
C#

int[,]array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
如果選擇宣告一個數組變數但不將其初始化,必須使用 new 運算子將一個數組分配給此變數。例如:
C#

int[,]array5;
array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK
//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error
也可以給陣列元素賦值,例如:
C#

array5[2,1] = 25;

寫一個詳細的小例子,用一個動態的STRING型陣列存放一個TABLE中的每一個單元中的內容:

     DataTabledt = ds.Tables[0];//取出一個內容是動態的表
     string[,] str = newstring[dt.Rows.Count,dt.Columns.Count];

    //用陣列str來存放一個TABLE中的每一個單元中的內容

    //dt.Rows.Count是表的行數,dt.Columns.Count是表的例數
    for(int i =0;i < dt.Rows.Count ; i++)
    {
      for(int j=0;j<dt.Columns.Count;j++)
      {
         str[i,j] =dt.Rows[i][j].ToString().Trim();
      }
    }

2 定義不定長陣列

一維:

int[] numbers = new int[]{1,2,3,4,5,6}; //不定長

int[] numbers = new int[3]{1,2,3};//定長

多維

int[,] numbers = newint[,]{{1,2,3},{1,2,3}}; //不定長

int[,] numbers = new int[2,2]{{1,2},{1,2}};//定長

例項:

A:int[] mf1=newint[6];

       //注意初始化陣列的範圍,或者指定初值; //包含6個元素的一維整數陣列,初值1,2,3,4,5,6

       int[]mf2=new int[6]{1,2,3,4,5,6};

B://一維字串陣列,如果提供了初始值設定項,則還可以省略 new 運算子

      string[] mf3={"c","c++","c#"};

C://一維物件陣列

      Object[] mf4 = new Object[5] { 26, 27, 28, 29, 30 };

D://二維整數陣列,初值mf5[0,0]=1,mf5[0,1]=2,mf5[1,0]=3,mf5[1,1]=4

       int[,]mf5=new int[,]{{1,2},{3,4}};

E://6*6的二維整型陣列

       int[,]mf6=new mf[6,6];

3 例項定義一維和二維陣列

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. namespace ConsoleApplication1  
  6. {  
  7.     class Program  
  8.     {  
  9.         staticvoid Main(string[] args)  
  10.         {  
  11.             //一維陣列定義與初始化
  12.             int[] one1 = newint[] {3,2,1 };//第一種方式
  13.             int[] one2 = { 3, 2, 1 };      //第二種方式
  14.             int[] one3;                    //第三種方式
  15.             one3=newint[]{3,2,1};  
  16.             //二維陣列定義與初始化
  17.             //不規則二維陣列
  18.             int[][] array = newint[2][];  
  19.             array[0] = newint[3];  
  20.             array[0][1] = 11;  
  21.             array[0][2] = 12;  
  22.             array[1] = newint[] { 1, 2, 3, 4,5 };  
  23.             //或int[][] array = new int[2][] { new int[] {0,11,12 }, new int[] {1,2,3,4,5 }};
  24.             Console.WriteLine( "不規則二維陣列:  ");  
  25.             for (int i = 0; i < array.Length; i++)  
  26.             {  
  27.                 foreach (int j in array[i])  
  28.                 {  
  29.                     Console.Write(j+"   ");  
  30.                 }  
  31.                 Console.WriteLine();  
  32.             }  
  33.             //固定長度的矩陣陣列
  34.             int[,] arrray1=newint[2,5]{{9,9,9,9,0},{0,0,9,0,0}};  
  35.             Console.WriteLine("規則二維陣列輸出方法一:  ");  
  36.             for (int ii = 0; ii < 2; ii++)                        //輸出方法一
  37.             {  
  38.                 for (int j = 0; j < 5; j++)  
  39.                 {  
  40.                     Console.Write(arrray1[ii,j] + "   ");  
  41.                 }  
  42.                 Console.WriteLine();  
  43.             }  
  44.             Console.WriteLine("規則二維陣列輸出方法二:  ");  
  45.             foreach (int j in arrray1)//arrray.length=10;      //輸出方法二
  46.             {  
  47.                 Console.Write(j + "   ");  
  48.             }  
  49.             Console.WriteLine();  
  50.             Console.ReadLine();  
  51.         }  
  52.     }  
  53. }  

4 對陣列操作

取得陣列元素個數:

        int b;   

       b = sizeof (a)/sizeof (*a);    

c#字串及陣列操作

2007-12-12 17:53字串操作(取當前時間)

stringtime=convert.tostring(DateTime.Today).split( new char []{''});     textbox1.text=time[0]; 以空格作為分界點;

1)陣列概述

C# 陣列從零開始建立索引,即陣列索引從零開始。C#中陣列的工作方式與在大多數其他流行語言中的工作方式類似。但還有一些差異應引起注意。

宣告陣列時,方括號 ([]) 必須跟在型別後面,而不是識別符號後面。在 C# 中,將方括號放在識別符號後是不合法的語法。

int[] table; // not int table[];

另一細節是,陣列的大小不是其型別的一部分,而在 C語言中它卻是陣列型別的一部分。這使您可以宣告一個數組並向它分配 int物件的任意陣列,而不管陣列長度如何。

int[] numbers; // declare numbers as an intarray of any size

numbers = new int[10]; // numbers is a10-element array

numbers = new int[20]; // now it's a 20-elementarray

2)宣告陣列

C# 支援一維陣列、多維陣列(矩形陣列)和陣列的陣列(交錯的陣列)。下面的示例展示如何宣告不同型別的陣列:

一維陣列:int[] numbers;

多維陣列:string[,] names;

陣列的陣列(交錯的):byte[][] scores;

宣告陣列(如上所示)並不實際建立它們。在C#中,陣列是物件(本教程稍後討論),必須進行例項化。下面的示例展示如何建立陣列:

一維陣列:int[] numbers = new int[5];

多維陣列:string[,] names = new string[5,4];

陣列的陣列(交錯的):byte[][] scores = new byte[5][]; for (int x = 0; x <scores.Length; x++) {scores[x] = new byt[4];

}

還可以有更大的陣列。例如,可以有三維的矩形陣列:int[,,] buttons = new int[4,5,3];

甚至可以將矩形陣列和交錯陣列混合使用。例如,下面的程式碼聲明瞭型別為 int 的二維陣列的三維陣列的一維陣列int[][,,][,] numbers;

3)初始化陣列

C# 通過將初始值括在大括號 ({}) 內為在宣告時初始化陣列提供了簡單而直接了當的方法。下面的示例展示初始化不同型別的陣列的各種方法。

注意如果在宣告時沒有初始化陣列,則陣列成員將自動初始化為該陣列型別的預設初始值。另外,如果將陣列宣告為某型別的欄位,則當例項化該型別時它將被設定為預設值 null

一維陣列

int[] numbers = new int[5] {1, 2, 3, 4, 5};

string[] names = new string[3]{"Matt", "Joanne", "Robert"};

可省略陣列的大小,如下所示:

int[] numbers = new int[] {1, 2, 3, 4, 5};

string[] names = new string[]{"Matt", "Joanne", "Robert"};

如果提供了初始值設定項,則還可以省略 new 運算子,如下所示:

int[] numbers = {1, 2, 3, 4, 5};

string[] names = {"Matt","Joanne", "Robert"};

多維陣列

int[,] numbers = new int[3, 2] { {1, 2},{3, 4}, {5, 6} };

string[,] siblings = new string[2, 2] {{"Mike","Amy"}, {"Mary","Albert"} };

可省略陣列的大小,如下所示:

int[,] numbers = new int[,] { {1, 2}, {3,4}, {5, 6} };

string[,] siblings = new string[,] {{"Mike","Amy"}, {"Mary","Albert"} };

如果提供了初始值設定項,則還可以省略 new 運算子,如下所示:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6}};

string[,] siblings = { {"Mike","Amy"}, {"Mary", "Albert"} };

交錯的陣列(陣列的陣列)

可以像下例所示那樣初始化交錯的陣列:

int[][] numbers = new int[2][] { new int[]{2,3,4}, new int[] {5,6,7,8,9} };

可省略第一個陣列的大小,如下所示:

int[][] numbers = new int[][] { new int[]{2,3,4}, new int[] {5,6,7,8,9} };-或-

int[][] numbers = { new int[] {2,3,4}, newint[] {5,6,7,8,9} };

請注意,對於交錯陣列的元素沒有初始化語法。

4)訪問陣列成員

訪問陣列成員可以直接進行,類似於在 C/C++ 中訪問陣列成員。例如,下面的程式碼建立一個名為 numbers 的陣列,然後向該陣列的第五個元素賦以 5:

int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3,2, 1, 0};

numbers[4] = 5;

下面的程式碼宣告一個多維陣列,並向位於 [1, 1] 的成員賦以 5:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6},{7, 8}, {9, 10} };

numbers[1, 1] = 5;

下面宣告一個一維交錯陣列,它包含兩個元素。第一個元素是兩個整數的陣列,第二個元素是三個整數的陣列:

int[][] numbers = new int[][] { new int[]{1, 2}, new int[] {3, 4, 5}};

下面的語句向第一個陣列的第一個元素賦以 58,向第二個陣列的第二個元素賦以 667:

numbers[0][0] = 58;

numbers[1][1] = 667;

5)陣列是物件

在 C# 中,陣列實際上是物件。System.Array 是所有陣列型別的抽象基型別。可以使用 System.Array 具有的屬性以及其他類成員。這種用法的一個示例是使用“長度”(Length) 屬性獲取陣列的長度。下面的程式碼將 numbers 陣列的長度(為 5)賦給名為 LengthOfNumbers 的變數:

int[] numbers = {1, 2, 3, 4, 5};

int LengthOfNumbers = numbers.Length;

System.Array 類提供許多有用的其他方法/屬性,如用於排序、搜尋和複製陣列的方法。

6)對陣列使用 foreach

C# 還提供 foreach 語句。該語句提供一種簡單、明瞭的方法來迴圈訪問陣列的元素。例如,下面的程式碼建立一個名為 numbers 的陣列,並用 foreach 語句迴圈訪問該陣列:

int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1,0};

foreach (int i innumbers){System.Console.WriteLine(i);}

由於有了多維陣列,可以使用相同方法來迴圈訪問元素,例如:

int[,] numbers = new int[3, 2] {{9, 99},{3, 33}, {5, 55}};

foreach(int i innumbers){Console.Write("{0} ", i);}

該示例的輸出為: 9 99 3 33 5 55

不過,由於有了多維陣列,使用巢狀 for 迴圈將使您可以更好地控制陣列元素

相關推薦

c#陣列建立操作 總結

1C#如何定義和使用多維陣列 不建議使用ArrayList,當數組裡的元素是值型別在操作的時候會出現大量的裝箱與拆箱步驟效能會損失許多,而是應該用什麼型別的元素建立什麼型別的陣列,除非你的元素有交叉或不確定才考慮採用ArrayList。 多維陣列定義如下: 陣列可以具有多個維度。例如,下列宣告建立一個

C程式設計--指標(對 “ 陣列 ” 進行輸出操作

在陣列中: *(a+i)和 a[i] 等價 在二維陣列中: 含義 表示形式 a[i][j] 的值 a[i][j]、*(a[i]+j)、 *( *(a+i)+j)

C# 陣列 交錯陣列的區別,即 [ , ] 與 [ ][ ]的區別

多維陣列的宣告 在宣告時,必須指定陣列的長度,格式為 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3];  或宣告時即賦值,由系統推斷長度 int [,] test1 = { {1,2,3},

MongoDB陣列的更新操作

          最近專案中遇到了MongoDB集合中多維陣列的更新操作,由於MongoDB中陣列定位符$僅支援一維陣列,對於多維陣列不支援,通過查閱資料並測試研究,得出了一種解決方式,具體操作如下

C++陣列:儲存方式、訪問方式和作為函式引數

C++中陣列可以巢狀,就是多維陣列。 多維陣列儲存與訪問方式 二維陣列:一維陣列可對應數學中的向量,而二維陣列可對應矩陣,可用一個二維陣列儲存矩陣。 圖1  二維陣列mat示意圖 二維陣列的橫向稱為行,縱向稱為列,上面這個陣列為三行六列。定義二維陣列的通用格式為:    

c/c++陣列的動態記憶體開闢與釋放

c語言版本 /************************************************************************/ /* 1、使用C語言方式模擬二維陣列的

C++陣列作為函式引數該怎麼寫?

眾所周知,函式引數中一維陣列的長度會被忽略的,但二維陣列的第二維度就會被要求指定長度(否則gcc會報告“陣列元素的型別不完全”)。這很好理解,它是為了讓函式知道矩陣的寬度。同理,三維陣列就會被要求指定第二維度和第三維度的長度,所以n維陣列只有第一維度的長度會被忽略。那麼對於

C++ 陣列練習

int ia[3][4]; int cnt = 0; for (auto &row : ia){ for (auto &col : row){ col = cnt++; cout&

C++二陣列建立以及行列的求法

1.普通方法建立二維陣列: 二維陣列的宣告: 對於一維陣列來說,陣列的大小可以省略,但對於二維陣列,C++規定,在宣告和初始化二維陣列時,只有第一維(行數)可以省略。 合法的宣告有: int a

C++ 二陣列 建立

建立 double **data; data = new double*[m];//行 for (int i = 0; i < m; ++i){ data[i] = new doub

C++ 用new 動態建立陣列

例:              int **array=new int*[n];       &nbs

C程式設計--指標(用 “ 函式 ” 對 “ 陣列 ” 進行操作

用指向陣列的指標做函式的引數 問題描述 有一個班,3個學生,各4門課,計算總平均分以及第n個學生的成績。 程式碼實現 #include<stdio.h> void average(float *p,int n);//

C++ 二動態陣列建立越界問題

目前VS2013不支援動態陣列,也就是int a[n], n必須是常量。建立動態陣列可以使用 new 的方法。比如建立一個二維動態陣列: int n; cin>>n; int **matrix=new int*[n];//matrix是一個存放指向

陣列陣列的指標總結

一.二維陣列的結構 看下一個二維陣列int array[2][3]={{1,2,3},{4,5,6}};的記憶體儲存形式: 二維陣列是巢狀定義的 ,這個二維陣列就是由兩個一維陣列array[0]

C#二陣列字串操作

二維陣列 int r = arr.Rank;//陣列的維數 Console.WriteLine("長度{0}",arr.Length);//總長度 int e=arr.GetLength(0);//獲取第一維的長度 Console.WriteLine("第一維的長度{0}"

01 NumPy 理解與ndarray建立陣列的常用方法與具體例項

NumPy get started 匯入numpy庫 import numpy as np 檢視版本 np.__version__ numpy核心其實就是一個 ndarray 多維陣列(演示 ndarray 輸出效果 以及 和 l

JavaScript的函式(定義與解析、匿名函式、函式傳參、return關鍵字)和陣列操作資料的方法、陣列陣列去重)

函式 函式就是重複執行的程式碼片。 1、函式定義與執行 <script type="text/javascript"> // 函式定義 function aa(){ alert('hello!'); } // 函式執行

如何用JavaScript清除陣列陣列

實現方式有兩種: 第一種實現方式如下:  var arr=[['a','b','c',,,,,], [1,2,3,,,]];                  

指標和陣列C Primer Plus)解釋

討論最簡單的二維陣列形式: int array[4][2]={{2,4},{6,8},{1,3},{5,7}};  1.  我們知道,陣列名同時代表陣列首元素的地址。array 是這個二維陣列的名字,array 也是這個二維陣列的首元素的地址。 注意array 這個二維陣列

python的陣列操作

建立一個二維陣列, #建立一個寬度為3,高度為4的陣列 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0]] mylist = [[0] * 3] * 4 但是操作mylist[0][1] = 1的時候 發現整個第二列都被賦值為1 [