PowerShell 数组

数组定义

简单数组

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()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容