arrays - PowerShell 中的 While 循环 boolean 条件

标签 arrays powershell object while-loop boolean

我正在尝试创建一个 while 循环,其中其条件 block 将根据是否在另一个数组中找到精确的字符串匹配而得出 true 或 false。如果找到完全匹配,则应迭代到数组中的下一项,直到条件为 false。

$Name = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
$row = "j"
$i = 0

While($row | Where-Object {$_ -match $Name[$i]}){$i++}

所需的输出为 $i = 9,因为它必须迭代 $Name 数组中的所有字符串直到第 9 个字符串。

最佳答案

您可以使用[Array]::IndexOf()代替循环:

$Name = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
$row = "j"
$i = [Array]::IndexOf($Name, $row)  # -> $i equals 9
如果未找到匹配项,

$i 将包含 -1


至于你尝试过的:

  • 要进行精确的字符串匹配,请使用 -ceq(-eq 运算符的区分大小写形式),而不是 -match,因为 -match 用于基于正则表达式的匹配(并且没有 anchor 会查找子字符串匹配)。

  • 条件逻辑是相反的:只要字符串匹配,您就希望继续循环。

  • 您的循环效率低下,因为它在每次迭代中都使用管道;对于内存中的数据,仅使用表达式会更快。

如果您确实想使用 PowerShell 循环解决此问题,我建议使用简单的 for 循环:

for ($i=0; $i -lt $Name.Count; ++$i) { if ($row -ceq $Name[$i]) { break } }

在这种情况下,如果未找到匹配项,$i 将包含 $Name.Count 的值。

关于arrays - PowerShell 中的 While 循环 boolean 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52509337/

相关文章:

python - 在多个 Python 实例中更改变量

javascript 对象属性引用

Python 从较大的 2D NumPy 数组创建较小的子数组?

字符串数组中的 java.lang.NullPointerException?

python - 按列名称为数据框的每一列创建一个数组

powershell - 如何在 PowerShell 中为读取主机配置超时

PowerShell Write-Debug 不会输出数组,但 Write-Output 会。这是故意的吗?

powershell - Powershell v2-安装打印机

c - 如何访问结构数组中的元素(非全局)

java - 我的 Eclipse 副本不知道对象或字符串是什么