Powershell Beralih pernyataan dengan beberapa nilai

11

Adakah yang tahu bagaimana saya bisa memiliki pernyataan switch dengan beberapa nilai yang mungkin seperti contoh di bawah ini?

switch ($myNumber) {
   1 3 5 7 9 { write-host "Odd" }
   2 4 6 8 10 {write-host "Even" }
}

Dulu mudah di VBScript, jadi saya yakin saya hanya melewatkan sesuatu yang sederhana.

misalnya dalam VBScript

Select Case myNumber 
   Case 1,3,5,7,9
      MsgBox "Odd"
   Case 2,4,6,8,10
      MsgBox "Even"
End Select

Ceria di muka,

Ben

Ben
sumber

Jawaban:

11
$myNumber = 3
$arrA = 1, 3, 5, 7, 9
$arrB = 2, 4, 6, 8, 10
switch ($myNumber) { 
    {$arrA -contains $_} { write-host "Odd" } 
    {$arrB -contains $_} { write-host "Even" }
}
Torai
sumber
+1 Menggunakan -eq bukannya -contains bahkan lebih baik.
Bernie White
11

Dalam kasus Anda, Anda dapat menggunakan

switch ($myNumber) {
  { $_ % 2 -eq 1 } { "Odd" }
  { $_ % 2 -eq 0 } { "Even" }
}

Upaya sebenarnya untuk memodelkan apa yang dapat Anda lakukan di VB mungkin akan menjadi sesuatu seperti

switch ($myNumber) {
  { 1,3,5,7,9  -contains $_ } { "Odd" }
  { 2,4,6,8,10 -contains $_ } { "Even" }
}
Joey
sumber
Saya suka ini lebih baik karena lebih akrab dengan pernyataan beralih tradisional.
Mark Henderson
0

Menambahkan ini untuk kelengkapan ...

Kode PowerShell terdekat dengan skrip VB di atas adalah:

PS C:\> switch (1) {  
  {$_ -eq 1 -or $_ -eq 3 -or $_ -eq 5 -or $_ -eq 7 -or $_ -eq 9} { "Odd"}
  {$_ -eq 2 -or $_ -eq 4 -or $_ -eq 6 -or $_ -eq 8 -or $_ -eq 10} { "Even"}
}
Odd

PS C:\VSProjects\Virtus\App_VM> switch (2) {  
  {$_ -eq 1 -or $_ -eq 3 -or $_ -eq 5 -or $_ -eq 7 -or $_ -eq 9} { "Odd"}
  {$_ -eq 2 -or $_ -eq 4 -or $_ -eq 6 -or $_ -eq 8 -or $_ -eq 10} { "Even"}
}
Even

Karena VB Select Case beroperasi melalui OR

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else
      [elsestatements-n]]
End Select

"Jika testexpression cocok dengan ekspresi daftar ekspresi Kasus apa pun, pernyataan berikut bahwa klausa Kasus dieksekusi hingga klausa Kasus berikutnya ..." Pilih Pernyataan Kasus

Hal yang menarik yang belum bisa saya pahami adalah hasil ini:

PS C:\> switch (1) {  
  {1 -or 3 -or 5 -or 7 -or 9} { "Odd"}
  {2 -or 4 -or 6 -or 8 -or 10} { "Even"}
}
Odd
Even 
Christopher_G_Lewis
sumber
0

switch ($myNumber) {
{$_ -in 1, 3, 5, 7, 9} { write-host "Odd" }
{$_ -in 2, 4, 6, 8, 10} {write-host "Even" }
}

Jindra
sumber
-1

Bagaimana ini untuk alternatif mudah menggunakan regex ?

switch -regex ($myNumber)
{
   "^[13579]$"     { Write-Host "Odd" }
   "^([2468]|10)$" { Write-Host "Even" }
   default         { Write-Host "Other" }
}
Simon
sumber
1
-1 untuk |10bagian itu.
Deer Hunter