数组定义
简单数组
PowerShell 使用 @() 语法创建数组,其中的内容被视为数组元素。要创建一个空数组,可以使用以下语法:
$emptyArray = @()
定义包含多个元素的数组时,需要使用逗号分隔各个元素:
$mixedArray = 10, "Text", 3.14, $true
单元素数组需要特殊语法,使用逗号前缀或 @() 语法:
$singleItem = ,"Element"
$singleItem = @("Element")
可以定义强类型数组,使用类型声明符 [type[]] 来限制数组元素的数据类型:
[int[]] $numberArray = 1, 2, 3
当无法转换元素类型时会产生错误。例如浮点数 3.14 会被转换为整数 3。
多维数组
可以使用锯齿状数组(数组的数组)来创建多维结构:
$jaggedArray = @(
@(1, 2, 3),
@(4, 5, 6, 7),
@(8, 9)
)
要创建真正的矩形多维数组,需要使用 .NET 类型:
$matrix = New-Object "Int32[,]" 3, 4
$matrix[0, 1] = 42
数组访问
定义示例数组
$items = @('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
基本访问
使用索引运算符 [] 访问数组元素,索引从 0 开始计数。
$firstItem = $items[0] # 返回 'a'
可以使用负数索引从数组末尾开始访问元素:
$lastItem = $items[-1] # 返回 'h'
$secondLast = $items[-2] # 返回 'g'
访问超出数组边界的索引会返回 $null。
$empty = $items[10] # 返回$null
范围访问
使用范围运算符 .. 可以一次访问多个元素:
$subset = $items[1..3] # 返回数组 ('b', 'c', 'd')
当范围同时包含正负索引时,PowerShell 会执行环绕操作:
# 从倒数第2个元素到第1个元素(正负混合)
$wrapAround = $items[-2..1]
# 执行过程:从索引-2(g)开始,到索引-1(h),然后环绕到索引0(a),最后到索引1(b)
# 返回数组 ('g', 'h', 'a', 'b')
当范围的符号一致时,PowerShell 按指定方向遍历:
# 负数范围,符号一致,按指定方向遍历
$reverse = $items[-1..-3]
# 执行过程:从索引-1(h)开始,向更负的方向到索引-3(f)
# 返回数组 ('h', 'g', 'f')
数组切片
PowerShell允许通过组合多个索引和范围来提取数组的切片:
使用逗号分隔的离散索引
# 返回索引 0, 2, 4 处的元素
$slice1 = $items[0,2,4]
# 结果: ('a', 'c', 'e')
组合离散索引和范围
# 访问第一个、最后一个和中间几个
$slice2 = $items[0,-1+3..5]
# 等价于: $items[0,7,3,4,5]
# 结果: ('a', 'h', 'd', 'e', 'f')
重复访问某些元素
# 返回索引 0, 2到3(包含), 0, 再次0
$slice3 = $items[,0+2..3+0,0]
# 等价于: $myArray[0,2,3,0,0]
# 结果: ('a', 'c', 'd', 'a', 'a')
# 注意: 第一个逗号是语法要求,表示从空开始
可以使用切片语法创建数组。
# 创建数组,包含 0, 2, 3, 0, 0
$newArray = ,0+2..3+0,0
# 等价于: $newArray = @(,0)+@(2..3)+@(0,0)
# 结果: @(0, 2, 3, 0, 0)
数组属性和方法
数据属性
使用 Count 属性获取数组中的元素数量:
$array.Count
使用 Length 属性也可以获取数组长度(与 Count 相同):
$array.Length
数组操作
可以使用 += 运算符向数组添加元素:
$numbers = @(1, 2, 3)
$numbers += 4
可以使用 + 运算符合并两个数组:
$combined = $array1 + $array2
可以使用 Clear() 方法清空数组的所有元素:
$array.Clear()
可以使用 IndexOf() 方法查找元素的索引位置:
$position = $array.IndexOf("Target")
可以使用 Contains() 方法检查数组是否包含特定元素:
$hasElement = $array.Contains("SearchTerm")
可以使用 Where() 方法筛选数组元素:
$filtered = $numbers.Where({ $_ -gt 10 })
可以使用 ForEach() 方法对每个元素执行操作:
$processed = $items.ForEach({ $_.ToUpper() })
可以使用 Sort() 方法对数组进行排序:
$sorted = $values.Sort()