陣列(Array)是程式語言中最常用的的數據類型之一, 由於 C#語言是Managed程式碼(統一由Common Language Runtime管理維護), 因此在C#使用陣列的時候, 用戶不需要考慮記憶體地址、資源開啟/關閉、越界檢查等底層工作, 就像是使用另一種數據格式一樣簡單。
此篇文章介紹了陣列的使用方法, 以及常用的操作, 最後介紹一個簡儀科技提供的dll工具 - SeeSharpTools.JY.ArrayUtility, 讓用戶可以對於陣列操作更快上手
陣列Array
在語法上, 陣列使用中括號[ ] 來代表, 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基底類別對陣列進行各種操作
常用屬性
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 命名空間, 即可使用上方功能。
תגובות