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

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" }
}

+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" }
}

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 

0

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


-1

Bagaimana ini untuk alternatif mudah menggunakan regex ?

switch -regex ($myNumber)
{
   "^[13579]$"     { Write-Host "Odd" }
   "^([2468]|10)$" { Write-Host "Even" }
   default         { Write-Host "Other" }
}

1
-1 untuk |10bagian itu.
Deer Hunter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.