about_Arrays
主題
about_Arrays
簡短描述
描述用於儲存資料元素的壓縮資料結構。
完整描述
陣列是一種資料結構,用於儲存相同型別的資料元素集合。Windows PowerShell 支援
的資料元素包括 string (字串)、int (32 位元整數)、long (64 位元整數)、bool
(布林)、byte (位元組) 和其他 Microsoft .NET Framework 物件型別。
建立並初始化陣列
若要建立並初始化陣列,請對變數指定多重數值。
儲存在陣列中的值以逗號分隔,並由指派運算子 (=) 隔開變數名稱和值。
例如,若要建立名稱為 $A 的陣列,且內含七個數字 (int) 值 22、5、10、8、12、9
和 80,請輸入:
$A = 22,5,10,8,12,9,80
您也可以使用範圍運算子 (..) 建立並初始化陣列。例如,若要建立並初始化名稱為
"$B" 且包含數值 5 到 8 的陣列,請輸入:
$B = 5..8
在此情況下,$B 包含了四個數值:5、6、7 和 8。
如果沒有指定資料型別,Windows PowerShell 會將每個陣列建立成物件陣列 (型別為
object[])。若要判斷陣列的資料型別,請使用 GetType() 方法。例如,若要判斷
$a 陣列的資料型別,請輸入:
$a.gettype()
若要建立強型別陣列,也就是只能包含一種特定型別值的陣列,請將變數轉換成陣列
型別,例如 string[]、long[] 或 int32[]。若要轉換陣列,請在變數名稱的前面加
上放在方括號內的陣列型別。例如,若要建立名稱為 $ia 的 32 位元整數陣列,且
內含四個整數 (1500、2230、3350 和 4000),請輸入:
[int32[]]$ia = 1500,2230,3350,4000
在此情況下,$ia 陣列只能包含整數。
您可以利用型別轉換,將陣列建立成 Microsoft .NET Framework 支援的任何型別。
例如,Get-Process 擷取用以代表處理序的物件是屬於 System.Diagnostics.Process
型別。
若要建立處理序物件的強型別陣列,請輸入下列命令:
[Diagnostics.Process[]]$zz = Get-Process
您可以使用 Cmdlet、函數或陳述式的輸出來填入陣列。例如,下列陳述式會建立一
個陣列,內含 "co" 字母開頭且正在目前的電腦上執行的處理序:
$LocalProcesses = get-process co*
如果陳述式只取得一個處理序,$LocalProcesses 變數不會是陣列。為確保命令建立
陣列,請使用 @ 陣列子運算式運算子,如下列範例所示:
$LocalProcesses = @(get-process co*)
即使命令只傳回一個處理序,$LocalProcesses 變數仍是陣列。雖然這個變數只有一
個成員,您還是可以將它當做任何其他陣列,例如可以在其中新增其他物件。
如需詳細資訊,請參閱 about_Operators。
讀取陣列
您可以使用陣列的變數名稱 (如 $A 或 $a) 來參考陣列。Windows PowerShell 沒有
大小寫之分。
若要顯示陣列中的所有元素,請輸入陣列名稱。例如:
$a
您可以使用索引 (起始位置為 0) 來參考陣列中的元素。請將索引編號放在方括號內。
例如,若要顯示 $a 陣列中的第一個元素,請輸入:
$a[0]
若要顯示 $a 陣列中的第三個元素,請輸入:
$a[2]
負數表示從陣列結尾起算。例如,"-1" 是指陣列中的最後一個元素。若要顯示陣列中
的最後 3 個元素,請輸入:
$a[-3..-1]
然而,使用這種標記法務必特別謹慎。
$a[0..-2]
此命令並不是指陣列中除了最後一個元素之外的所有元素;而是指陣列中的第一個、
最後一個元素,以及倒數第二個元素。
您可以使用範圍運算子來顯示陣列中所有值的子集。例如,若要顯示索引位置從 1
到 3 的資料元素,請輸入:
$a[1..3]
您可以使用加法運算子 (+) 將範圍與陣列中的元素清單合併。例如,若要顯示索引
位置為 0、2、4 到 6 的元素,請輸入:
$a[0,2+4..6]
若要判斷陣列中的項目數,請將範圍與陣列的 length 屬性合併。例如,若要顯示從
索引位置 2 到陣列結尾的元素,請輸入:
$a[2..($a.length-1)]
length 設為 -1 是因為索引的起始位置為 0。換句話說,若陣列包含三個元素
(1,2,3),則第三個元素的索引為 2,也就是陣列的長度減一。
您也可以使用迴圈建構 (如 Foreach、For 和 While 迴圈) 來參考陣列中的元素。
例如,若要使用 Foreach 迴圈來顯示 $a 陣列中的元素,請輸入:
foreach ($element in $a) {$element}
Foreach 迴圈會逐一查看陣列並傳回陣列中的每個值,直到到達陣列結尾為止。
For 迴圈特別適用於以遞增計數器的方式檢查陣列中的元素。
例如,若要使用 For 迴圈來傳回陣列中
索引位置為偶數的元素值,請輸入:
for ($i = 0; $i -le ($a.length - 1); $i += 2) {$a[$i]}
使用 While 迴圈可以顯示陣列中的元素,直到定義的條件不再為 true 為止。
例如,若要顯示 $a 陣列中陣列索引小於 4 的元素,請輸入:
$i=0
while($i -lt 4) {$a[$i]; $i++}
若要了解陣列的屬性和方法,例如 Length 屬性和 SetValue 方法,請使用
Get-Member Cmdlet 的 InputObject 參數。經由管道將陣列輸出至
Get-Member 時,這個 Cmdlet 會顯示陣列中的物件相關資訊。
如果使用 InputObject 參數,則會顯示陣列的相關資訊。
若要找出 $a 陣列的屬性和方法,請輸入:
get-member -inputobject $a
操控陣列
您可以變更陣列中的元素、將元素新增至陣列,以及將兩個陣列中的值合併成第三個
陣列。
若要變更陣列中特定元素的值,請指定要變更的陣列名稱和元素索引,然後使用指派
運算子 (=) 為元素指定新值。例如,若要將 $a 陣列中第二個項目的值 (索引位
置 1) 變更為 10,請輸入:
$a[1] = 10
您也可以使用陣列的 SetValue 方法變更值。下列範例會將 $a 陣列的第二個值 (索
引位置 1) 變更為 500:
$a.SetValue(500,1)
您可以使用 += 運算子為現有的陣列附加元素。
此運算子會增加現有值。若對陣列的元素使用此運算子,將會增加該元素的值。若對
陣列本身使用此運算子,則會將值附加到陣列。例如,若要將值為 200 的元素附加
到 $a 陣列,請輸入:
$a += 200
要刪除陣列的元素並不容易,但您可選取現有陣列中的元素,另外建立新陣列。
例如,若要選取 $a 陣列中除了索引位置為 2 的所有元素,
另外建立 $t 陣列,請輸入:
$t = $a[0,1 + 3..($a.length - 1)]
若要將兩個陣列合併成單一陣列,請使用加法運算子 (+)。下列範例會建立兩個陣
列,然後合併兩者,再顯示合併後的陣列。
$x = 1,3
$y = 5,9
$z = $x + $y
在此情況下,$z 陣列包含了 1、3、5 和 9。
若要刪除陣列,請使用 Remove-Item Cmdlet 刪除含有該陣列的變數。下列命令會指
定刪除 Variable:
磁碟機中的 "a" 元素。
remove-item variable:a
(如需 Variable: 磁碟機的詳細資訊,請參閱 Variable 提供者說明主題)。
請參閱
about_Assignment_Operators
about_Hash_Tables
about_Operators
about_For
about_Foreach
about_While