变量是任何类型的编码 中最基本的数据结构。但单个变量不足以满足大多数目的,尤其是在处理更复杂的算法时。
这就是数组的用武之地。无论是 C++ 还是 Python ,数组都以某种形式存在于每种编程语言中。但 Windows PowerShell 又如何呢? PowerShell 阵列如何工作?你如何使用它们?它们的语法是什么?让我们来看看吧。
PowerShell 数组 101
简单来说,数组只是变量的结构化集合。这个想法是通过将相关变量折叠成一个编号集来消除跟踪数十个名称的麻烦。
在 PowerShell 中,您可以通过在变量名称前添加 $ 符号来创建变量。例如:
$prime = 13
变量可以包含任何数据类型,从数字到字符串。您只需使用双引号或单引号来指定字符串即可。
$name =“莱文”
现在要创建一个新数组,只需将多个值分配给同一个变量,并用逗号分隔。像这样:
$week =“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期日”
有些人更喜欢将变量显式转换为数组以避免混淆,尽管这不是必需的。为此,请将值放入以 @ 符号开头的括号中。
$week = @(“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期日”)
当尝试将其他命令的输出放入数组时,这通常会派上用场,而您无法以正确的格式手动写入它们。
创建数组
我们已经了解了创建数组的最常见方法。但根据具体情况,还有其他可能更合适的方法。例如,如果您想创建一个包含一定范围数字的数组,则可以使用范围运算符:
$digits = (0..9)
这将创建一个包含从零到九的所有十位数字的数组。您还可以初始化一个空数组,以防您稍后只需要一个地方来存储值。.
$values = @()
多个数组甚至可以相互嵌套,尽管这种类型的用法很快就会变得混乱。
$坐标 = @(
(5, 10, 23),
(11, 7, 16)
)
默认情况下,数组可以存储任何变量类型,无论是数字、字符串还是两者的混合。但是,如果您想限制放入其中的值,则可以显式定义类型。例如:
[int[]] $数字 = 2,3,4,5
这样,数组就只能保存整数了。尝试为其分配任何其他类型的值将返回错误。这对于防止专门处理数值的数组出现简单错误很有用,因为将字符串输入到要在计算中使用的变量中会产生问题。
访问数组
到目前为止,我们已经看到了多种创建包含各种类型数据的数组的方法。但如何访问这些数据呢?
PowerShell 数组使用与其他编程语言相同的格式。每个数组变量都可以通过其索引号进行访问。例如:
$var = $numbers[5]
这会将 $numbers数组的索引 5 中存储的值复制到 $var变量中。请注意,数组索引从 0 开始计数,因此第一项是从零访问的。
如果我们要输出这个,例如:
“$天[2]”
我们将在星期三,而不是星期二。
您也可以使用相同的方法来修改这些值。例如,以下命令会将数组的第二个元素更改为零:
$numbers[1] = 0
您还可以向现有数组添加更多元素,而不是仅通过像算术表达式一样添加它们来更改当前条目的值。
$names +=“约翰”
此方法也可用于一次添加多个条目,甚至整个数组。
$names +=“查理、利亚姆、特蕾莎”
$姓名 += $姓氏
逗号分隔的方法也适用于访问多个数组元素。例如,输入此内容会将 $days的前五个元素存储在 $weekdays中。.
$weekdays = $days[0,1,2,3,4]
迭代数组
手动访问数组的特定元素固然很好,但如果您想对数组的整个内容执行操作,则可能会变得乏味。更优雅的方法是使用 For 循环。
For循环可以系统地遍历数组的所有元素,根据指令处理每个值。这是构建这样一个循环的方法:
对于 ($i = 0 ; $i -lt $days.Length ; $i++)
{
$days[$i]
}
array.Length 函数返回数组的大小,基本上就是数组中元素的数量。可以将其插入 For 循环的测试表达式参数中,以全面迭代所有元素。
Foreach 循环和 Foreach 对象循环可以使用更精简的 PowerShell 脚本执行相同的操作。
Foreach($days,$days)
{
$day
}
这可以节省您确定数组大小的精力,将详细信息留给 PowerShell 来处理。
什么时候应该使用 PowerShell 数组
复杂脚本中错误的最大来源是错误引用的变量。发生这种情况的原因是存在大量唯一命名的变量,这使得很难记住它们的用途。
解决此问题的最简单方法是广泛使用数组。所有以某种方式相关的变量都可以分配给一个数组并通过它们的索引号进行访问。
微软PowerShell的 主要用例是自动化,数组在其中发挥着关键作用。 PowerShell cmdlet 返回的对象可以存储到数组中并进行迭代。这允许自动执行顺序任务,极大地简化系统管理。
.