powershell - switch 语句不匹配所有条件
问题描述
我一定在这里遗漏了一些东西。我正在计算一个列表,并且想跳过特定的数字,所以我做了一个 switch 语句:
$locationNumber = 00
DO {
$locationNumber++
switch ($locationNumber) {
21 {$locationNumber++}
31 {$locationNumber++}
43 {$locationNumber++}
44 {$locationNumber++}
49 {$locationNumber++}
51 {$locationNumber++}
}
Write-Host $locationNumber
} while ($locationNumber -lt 53)
这是输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 32 33 34 35 36 37 38 39 40 41 42 44 45 46 437 48
请注意,出现了 44,即使我没有休息时间。有人可以告诉我为什么/解决这个问题的方法吗?
谢谢,
编辑:为上下文添加了更多代码
解决方案
如果您想从一系列数字中消除一组固定数字-通过21, 31, 43, 44, 49, 51
:1
53
$(
switch (1..53) {
{ $_ -notin 21, 31, 43, 44, 49, 51 } { $_ }
}
) -join ' '
上面的产量(为了便于阅读,换行) - 请注意上面列表中的所有数字是如何丢失的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29
30 32 33 34 35 36 37 38 39 40 41 42 45 46 47 48 50 52 53
要捕获数组中的数字,只需分配给一个变量来代替$(...)
:
$nums = switch { ... }
以上利用了以下特性:
至于你尝试了什么:
通过应用++
到您想跳过的数字,它们仍然由在语句的同一迭代中Write-Host
执行的语句打印出来,在语句之后。do
switch
Andrew Ryan Davis 的有用答案default
显示了通过分支解决该问题的方法。虽然上面的解决方案更简洁,但安德鲁的答案实际上更快,尽管这在实践中可能并不重要。
推荐阅读
- python - 自引用不适用于 Flask (SQLAlchemy)
- php - PHP $_POST 数组
- javascript - 当它会导致错误时如何禁用“背景附件:已修复”
- json - 在 lua 中创建 Json 对象
- cmake - cmake 3.15 adding JOB_POOL to add_custom_command SOMETIMES
- jenkins - 为什么我不能在与主机(Windows 10)相同的机器上设置詹金斯代理,詹金斯在本地主机上?
- javascript - toggleClass - localStorage 在第一次加载页面时从某些元素中删除所有类。如何解决?
- python - 在列表中解压迭代器的 Pythonic 方法
- java - How do I display a message that tells the user how far off their guess was from the randomly generated number?
- excel - Default Starting Cell in new worksheet