gpt4 book ai didi

arrays - PowerShell中的While循环 boolean 条件

转载 作者:行者123 更新时间:2023-12-02 23:37:10 24 4
gpt4 key购买 nike

我正在尝试创建一个while循环,其中的条件块将根据在另一个数组中是否找到完全匹配的字符串而导致结果为true或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用于基于正则表达式的匹配(并且没有定位符会找到子字符串匹配项)。
  • 条件语句的逻辑是相反的:只要字符串不匹配,就希望保持循环。
  • 您的循环效率低下,因为它在每次迭代中都使用管道。对于内存数据,仅使用表达式会更快。

  • 如果您确实想使用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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com