陣列Array的操作

陣列(Array)是程式語言中最常用的的數據類型之一, 由於 C#語言是Managed程式碼(統一由Common Language Runtime管理維護), 因此在C#使用陣列的時候, 用戶不需要考慮記憶體地址、資源開啟/關閉、越界檢查等底層工作, 就像是使用另一種數據格式一樣簡單。

此篇文章介紹了陣列的使用方法, 以及常用的操作, 最後介紹一個簡儀科技提供的dll工具 - SeeSharpTools.JY.ArrayUtility, 讓用戶可以對於陣列操作更快上手

陣列Array


MSDN介紹


在語法上, 陣列使用中括號[ ] 來代表, C#提供了三種陣列 (1)一維陣列 (2)多維陣列 (3)不規則陣列

  • 一維陣列

int[] array1 = new int[5] 
int[] array2 = new int[] { 1, 3, 5, 7, 9 }

顧名思義, 一維陣列就是一個維度的連續數據集合, 初始化的時候可以使用兩種方式, 第一種是指定大小(將長度寫在中括號裏頭), 第二種是直接指定值


  • 多維陣列

int[,] multiDimensionalArray1 = new int[2, 3]
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }

多維陣列是用逗點做分割, 初始化的方法跟一維陣列一樣有兩種方式。 需要注意的是多維陣列的長度必須一致, 如果有長度不一致的需要, 請使用不規則陣列(Jagged Array)

  • 不規則陣列(Jagged Array)

int[][] jaggedArray = new int[6][];
int[][] jaggedArray = { new int[]{ 1, 2, 3 }, new int[]{ 1, 2 } }

不規則陣列是由多個一維陣列組合而成, 每個一維陣列的長度可以不同, 標示是由分開的中括號集合而成。在初始化的時候需要先指定第一層陣列的長度

Array類別

C#和C/C++最大的不同點, 在於C#語言中, 陣列本身是一個被定義好的類別/物件, 而在C/C++當中陣列是一個連續的記憶體位址區域。因此C#裡對於陣列, 用戶可以使用抽象的Array基底類別對陣列進行各種操作

MSDN介紹


常用屬性

  • Length - 陣列裡所有維度的元素總和(不規則陣列僅顯示第一維度的長度)

  • Count - 和Length功能相同

  • Rank - 顯示陣列的維度

常用方法

  • Clear - 清空陣列中的元素並設定成元素的預設值

  • Exist - 判定陣列中是否有滿足指定條件的元素

  • Find - 找尋陣列中滿足指定條件的元素

  • FindIndex - 返回陣列中滿足指定條件的元素索引值

  • GetLength - 返回指定維度的長度

  • GetValue - 範圍指定索引位置的值

  • Copy - 從一個陣列複製到另一個陣列


在實際操作過程中, 陣列的複製也可以使用另外一個效率較高的函數 ( Buffer.BlockCopy ) , 這個方法跟Array.Copy的參數一樣, 但是經比較後效率略高於Copy, 在做大量陣列複製的應用中比較適合使用。

陣列的操作


LINQ

陣列在C#裡繼承自不同的介面(Interface), 因此有豐富的延伸方法可以對陣列進行操作, 在此介紹一個延伸的命名空間 System.Linq , Linq是Language-Integrated Query的縮寫, 最原始的出發點是為了更有效率地從資料庫拿回指定的陣列集合, 也可以使用在Array陣列的操作上。常用的一些陣列操作如下

  • Sum - 加總

  • Average - 平均

  • Contain - 判定是否包含滿足條件的元素

  • Max - 最大值

  • Min - 最小值

SeeSharpToosl.JY.ArrayUtility

簡儀科技針對測試測量領域, 新添加了一系列的陣列操作功能, 簡化使用者在程式裡的操作跟程式碼可讀性。功能列舉如下

計算功能

  • Add - 兩個一維陣列(長度需相同)相加

  • Subtract - 兩個一維陣列(長度需相同)相減

  • Multiply - 兩個一維陣列(長度需相同)相乘

  • AddOffset - 將指定的陣列(一維或二維)加上指定值

  • SubtractOffset - 將指定的陣列(一維或二維)減掉指定值

  • MultiplyScale - 將指定的陣列(一維或二維)乘上指定值

  • Zero - 將指定的陣列(一維或二維)其中的值全部設定成0

  • Sum - 加總

  • Average - 平均

  • RMS - 方均根

  • Abs - 絕對值

陣列操作功能

  • GetArraySubset - 取得陣列中指定範圍的一段資料, 適用一維和二維陣列

  • ReplaceArraySubset - 替換陣列中指定範圍的一段資料, 適用一維和二維陣列

  • Transpose - 轉置二維陣列

使用方法很簡單, 首先需要安裝簡儀科技SeeSharpTool的安裝檔(免費), 在原始碼中引用SeeSharpTools.JY.ArrayUtililty 命名空間, 即可使用上方功能。

©JYTEK Taiwan 2019