कई मूल्यों के साथ पॉवर्सशेल स्विच स्टेटमेंट


11

किसी को भी पता है कि नीचे दिए गए उदाहरण की तरह कई संभावित मूल्यों के साथ मेरे पास एक स्विच स्टेटमेंट कैसे हो सकता है?

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

VBScript में आसान हुआ करता था, इसलिए मुझे यकीन है कि मैं कुछ सरल याद कर रहा हूँ।

जैसे VBScript में

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

अग्रिम में चीयर्स,

बेन

जवाबों:


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 का उपयोग -कंटे के बजाय -q भी बेहतर है।
बर्नी व्हाइट

11

आपके मामले में आप बस उपयोग कर सकते हैं

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

VB में आप वहां क्या कर सकते हैं, यह मॉडल करने का एक वास्तविक प्रयास शायद कुछ ऐसा होगा

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

मुझे यह एक बेहतर लगता है क्योंकि यह पारंपरिक स्विच स्टेटमेंट से अधिक परिचित है।
मार्क हेंडरसन

0

इसे पूर्णता के लिए जोड़ रहा है ...

उपरोक्त VB स्क्रिप्ट के लिए निकटतम PowerShell कोड है:

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

क्योंकि VB स्क्रिप्ट सेलेक्ट केस OR से संचालित होता है

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

"यदि टेस्टएक्सप्रेशन किसी केस एक्सप्रेशन सूची से मेल खाता है, तो उस केस क्लॉज के बाद वाले स्टेटमेंट अगले केस क्लॉज तक निष्पादित होते हैं ... केस स्टेटमेंट चुनें

दिलचस्प बात यह है कि मैं यह पता लगाने में सक्षम नहीं है कि यह परिणाम है:

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

रेगेक्स का उपयोग करके एक आसान विकल्प के लिए यह कैसे होता है ?

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

1
-1 |10भाग के लिए।
हिरण हंटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.