about_Arrays

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

在此插入簡介。

主題

about_Arrays

簡短描述

描述陣列,其為設計用來儲存元素集合的資料結構。

詳細描述

陣列是設計用來儲存元素集合的資料結構。元素可以是相同或不同的類型。

從 Windows PowerShell® 3.0 開始,零或一個物件的集合具有一些陣列的屬性。

建立及初始化陣列

若要建立和初始化陣列,請將多個值指派給變數。儲存在陣列中的值以逗號分隔並使用指派運算子 (=) 與變數名稱分隔。

例如,若要建立名為 $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 會將每個陣列建立為物件陣列 (類型:System.Object[])。若要判斷陣列的資料類型,請使用 GetType() 方法。比方說,若要判斷陣列 $a 的資料類型,請輸入:

$a.GetType()

若要建立強型別的陣列,意即該陣列只可以包含特定類型的值,請將變數轉換為陣列類型,例如 string[]、long[] 或 int32[]。若要轉換陣列,請在變數名稱前面加上用方括弧括住的陣列類型。例如,若要建立名為 $ia 且包含四個整數 (1500、2230、3350 和 4000) 的 32 位元整數陣列,請輸入:

[int32[]]$ia = 1500,2230,3350,4000

如此一來,$ia 陣列就只能包含整數。

您可以將陣列建立為會轉換成 Microsoft .NET Framework 所支援的任何類型。例如,Get-Process 所擷取用來代表處理序的物件為 System.Diagnostics.Process 類型。若要建立處理序物件的強型別陣列,請輸入下列命令:

[Diagnostics.Process[]]$zz = Get-Process

陣列子運算式運算子

即使包含零或一個物件,陣列子運算式運算子也能建立陣列。

陣列運算子的語法如下所示:

@( ... )

您可以使用陣列運算子來建立零或一個物件的陣列。

PS C:\>$a = @("One")
PS C:\>$a.Count
1

PS C:\>$b = @()
PS C:\>$b.Count
0

當您要取得物件但不知道會取得多少個時,陣列運算子在指令碼中特別有用。

PS C:\> $p = @(Get-Process Notepad)

如需有關陣列子運算式運算子的詳細資訊,請參閱 about_Operators。

讀取陣列

您可以使用陣列的變數名稱來參考陣列。若要顯示陣列中的所有元素,請輸入陣列名稱。例如:

$a

您可以使用索引,從位置 0 開始參考陣列中的元素 。請用方括弧括住索引編號。例如,若要顯示 $a 陣列的第一個元素,請輸入:

$a[0]

若要顯示 $a 陣列的第三個元素,請輸入:

$a[2]

負數代表從陣列尾端開始計算。例如,"-1" 指的是陣列的最後一個元素。若要顯示陣列的最後三個元素,請輸入:

$a[-3..-1]

但是請謹慎使用這個標記法。

$a[0..-2]

此命令並非指稱陣列中除了最後一個以外的所有元素。其是指陣列中的第一個、最後一個和倒數第二個元素。

您可以使用範圍運算子來顯示陣列中所有值的子集。例如,若要顯示索引位置為 1 到 3 的資料元素,請輸入:

$a[1..3]

您可以使用加法運算子 (+) 來結合陣列中元素清單的範圍。例如,若要顯示位於索引位置 0、2 以及從 4 到 6 的元素,請輸入:

$a[0,2+4..6]

若要判斷陣列中有多少元素,請使用 Length 屬性或其 Count 別名。

$a.Count

您也可以使用迴圈結構,例如 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。例如,若要在陣列索引小於 4 時顯示 $a 陣列中的元素,請輸入:

$i=0
while($i -lt 4) {$a[$i]; $i++}

取得陣列的成員

若要取得陣列的屬性和方法,例如 Length 屬性和 SetValue 方法,請使用 Get-Member Cmdlet 的 InputObject 參數。

當您透過管道將陣列傳送至 Get-Member 時,Windows PowerShell 會一次傳送一個項目,而 Get-Member 會傳回陣列中每個項目的類型 (忽略重複的項目)。

當您使用 InputObject 參數時,Get-Member 會傳回陣列的成員。

例如,下列命令會取得 $a 變數中陣列的成員。

Get-Member -InputObject $a

您也可以在經管道將值傳送至 Get-Member Cmdlet 之前,透過輸入逗號 (,) 來取得陣列的成員。逗號能將該陣列變成陣列之陣列中的第二個元素。Windows PowerShell 透過管道一次傳送一個陣列,而 Get-Member 會傳回陣列的成員。

,$a | Get-Member

,(1,2,3) | Get-Member

操控陣列

您可以變更陣列中的元素、將元素新增到陣列中,並將兩個陣列中的值結合到第三個陣列中。

若要變更陣列中特定元素的值,請指定陣列名稱和您要變更之元素的索引,然後使用指派運算子 (=) 來指定元素的新值。例如,若要將 $a 陣列中第二個元素 (索引位置 1) 的值變更為 10,請輸入:

$a[1] = 10

您也可以使用陣列中的 SetValue 方法來變更值。下列範例會將 $a 陣列的第二個值 (索引位置 1) 變更為 500:

$a.SetValue(500,1)

您可以使用 + = 運算子將元素新增至陣列。當您使用它時,Windows PowerShell 實際上是以原始陣列的值建立新陣列,再加上值。例如,若要將值為 200 的元素加入到 $a 變數的陣列中,請輸入:

$a += 200

要刪除陣列中的元素並不容易,但您可以建立新的陣列,而其中只包含現有陣列中被選取的元素。比方說,若要建立 $t 陣列,而其中有 $a 陣列中索引位置 2 的值以外的所有元素,請輸入:

$t = $a[0,1 + 3..($a.length - 1)]

若要將兩個陣列結合成單一陣列,請使用加號運算子 (+)。以下範例會建立兩個陣列並將兩者結合為一,然後顯示結合的陣列結果。

$x = 1,3
$y = 5,9
$z = $x + $y

如此一來,$z 陣列就包含 1、3、5 和 9。

若要刪除陣列,請將 $null 值指派給陣列。下列命令會刪除 $a 變數中的陣列。

$a = $null

您也可以使用 Remove-Item Cmdlet,但是指派 $null 值會更加快速,特別是針對大型陣列而言。

零或一的陣列

從 Windows PowerShell 3.0 開始,零或一個物件的集合具有 Count 和 Length 屬性。此外,您也可以索引單一物件陣列。這項功能可協助您避免當命令需要得到一個集合,但得到的項目卻少於兩個時所發生的指令碼錯誤。

下列範例將示範這項功能。

#Zero objects
$a = $null
$a.Count
0
$a.Length
0

#One object
$a = 4
$a.Count
1
$a.Length
1
$a[0]
4
$a[-1]
4

另請參閱

about_Assignment_Operators

about_Hash_Tables

about_Operators

about_For

about_Foreach

about_While