数组
Powershell支持数组这种数据结构,但这种数组并不要求数据类型的一致性,更类似于其他语言中的列表。其创建过程非常简单,直接通过逗号分割元素即可,也可以通过【@()】将数组元素括起来。通过方括号可以索引数组元素,从而实现赋值等操作,当下标大于等于0时,将从0开始正向索引;当下标小于0时,将从-1开始,从数组最后一个元素开始索引。此外,数组还重载了运算符+和+=,可实现拼接操作。
$a = 1,2,3,"hello", "world"
$a[0] # 1
$a[-1] # world
$b = @(4,5,6)
$c = $a+$b
$c.Count # 返回数组的长度 8
数组在创建和索引时,如用范围运算符【 . . .. ..】进行连接,就可以创建或索引一组连续的序列。例如,下面将创建 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 1,2,3,4,5,6,7,8,9 1,2,3,4,5,6,7,8,9,并索引其中的 345 3 4 5 345。
$d = 1..9
$d[3..5]
多维数组
PowerShell支持多维数组,但在创建时,需要使用New-Object命令,下面分别创建一个 2 × 2 2\times2 2×2的矩阵和一个 3 × 3 × 3 3\times3\times3 3×3×3的张量,其元素个数分别是4和27。
$d22 = new-object "object[,]" 2,2
$d333 = new-object "object[,,]" 3,3,3
$d22.Count # 4
$d333.Count # 27
通过@符号嵌套也是一种创建多维数组的方法,但这个“维度”的含义将不那么直观,将其称作嵌套列表显然更加合适。
遍历
Powershell提供了foreach语句,可用于遍历数组中的内容,是循环语句的重要补充,示例如下
foreach($i in $c){
echo $i
}
# 将依次打印$c中的内容 1 2 3 hello world 4 5 6
此外,数组也内置了foreach方法,用于对数组中的每个元素予以相同的操作,例如对数组中每个值取平方,让$$d$的值变为 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 1,4,9,16,25,36,49,64,81 1,4,9,16,25,36,49,64,81,示例如下,其中$$_$就表示从数组中取来并参与循环的值。
$e = $d.foreach{$_ * $_}
查找
【where】方法可实现数组的查找,其输入参数和foreach相似,都是一组表达式,其返回值是让表达式为真的值。例如,希望查找$$e$中所有小于10的值,则可进行如下操作
$e.where{$_ -le 10} # 返回1, 4, 9
$e.where({$_ -le 10}, "first") # 返回1
$e.where({$_ -le 10}, 2) # 返回9
其中,first和2均为where的参数,表示下面的五种模式
- 【0】Default 返回所有项
- 【1】First 返回第一个项
- 【2】Last 返回最后一个项
- 【3】SkipUntil 跳过项,直到条件为 true,返回所有剩余项
- 【4】Until 返回所有项,直到条件为 true