about_Arrays

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

在此处插入介绍。

主题

about_Arrays

简短说明

介绍设计用于存储项集合的数据结构的数组。

详细说明

数组是一种设计用于存储项集合的数据结构。项的类型可以相同,也可以不同。

从 Windows PowerShell® 3.0 开始,零个或一个对象的集合具有数组的某些属性。

创建和初始化数组

若要创建和初始化数组,请将多个值分配给变量。数组中存储的值以逗号分隔,并通过赋值运算符 (=) 与变量名隔开。

例如,若要创建一个名为 $A 的数组(包含 22、5、10、8、12、9 和 80 七个数字 (int) 值),请键入:

$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

从数组中删除元素并不容易,但可以创建一个仅含有现有数组的所选元素的新数组。例如,若要使用 $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。

若要删除数组,请将 $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