首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PowerShell中的并发循环布尔条件

PowerShell中的并发循环布尔条件
EN

Stack Overflow用户
提问于 2018-09-26 03:04:35
回答 1查看 692关注 0票数 2

我正在尝试创建一个while循环,如果在另一个数组中找到准确的字符串匹配,则它的条件块将导致true或false。如果找到精确匹配,则应该迭代到数组中的下一项,直到条件为false为止。

代码语言:javascript
运行
复制
$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个字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 03:09:20

您可以使用[Array]::IndexOf()而不是循环:

代码语言:javascript
运行
复制
$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循环:

代码语言:javascript
运行
复制
for ($i=0; $i -lt $Name.Count; ++$i) { if ($row -ceq $Name[$i]) { break } }

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52509337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档