$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" }
}
Alguém sabe como posso ter uma instrução switch com vários valores possíveis, como o exemplo abaixo?
switch ($myNumber) {
1 3 5 7 9 { write-host "Odd" }
2 4 6 8 10 {write-host "Even" }
}
Costumava ser fácil no VBScript, por isso tenho a certeza que só sinto falta de algo simples.
por exemplo, em VBScript
Select Case myNumber
Case 1,3,5,7,9
MsgBox "Odd"
Case 2,4,6,8,10
MsgBox "Even"
End Select
Cheers antecipadamente,
Ben
No seu caso, você pode simplesmente usar
switch ($myNumber) {
{ $_ % 2 -eq 1 } { "Odd" }
{ $_ % 2 -eq 0 } { "Even" }
}
Uma tentativa real de modelar o que você pode fazer lá no VB provavelmente seria algo como
switch ($myNumber) {
{ 1,3,5,7,9 -contains $_ } { "Odd" }
{ 2,4,6,8,10 -contains $_ } { "Even" }
}
Adicionando isso para completar ...
O código PowerShell mais próximo do script VB acima é:
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
Porque o script VB Select Case opera por meio de um OR
Select Case testexpression
[Case expressionlist-n
[statements-n]] . . .
[Case Else
[elsestatements-n]]
End Select
"Se testexpression corresponder a qualquer expressão expression expression, as instruções que seguem essa cláusula Case são executadas até a próxima cláusula Case ..." Selecione a declaração do caso
A coisa interessante que não consegui descobrir é esse resultado:
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
Que tal isso para uma alternativa fácil usando regex ?
switch -regex ($myNumber)
{
"^[13579]$" { Write-Host "Odd" }
"^([2468]|10)$" { Write-Host "Even" }
default { Write-Host "Other" }
}
Tags powershell