如何在powershell中检查输入值是否在数组中

Kri*_*ish 13 powershell

$InputArray = @(a,e,i,o,u,1,2,3,4,5)
$UserInput = "Enter any value:"
Run Code Online (Sandbox Code Playgroud)

我们如何检查$ UserInput是否在$ InputArray中并提示输入正确?

Ans*_*ers 16

使用-contains运营商:

$InputArray -contains $UserInput
Run Code Online (Sandbox Code Playgroud)

使用更新的PowerShell版本(v3及更高版本),您也可以使用-in运算符,这对许多人来说更自然:

$UserInput -in $InputArray
Run Code Online (Sandbox Code Playgroud)

但要注意,它们中的任何一个都在参考数组($InputArray)上进行线性搜索.如果您的阵列很小并且您没有进行大量的比较,那么它不会受到影响,但如果使用哈希表查找性能是一个问题,那么这将是一种更好的方法:

$validInputs = @{
    'a' = $true
    'e' = $true
    'i' = $true
    'o' = $true
    'u' = $true
    '1' = $true
    '2' = $true
    '3' = $true
    '4' = $true
    '5' = $true
}

$validInputs.ContainsKey($UserInput)
Run Code Online (Sandbox Code Playgroud)

  • 这些检查也可以使用“-notcontains”和“-notin”来反转。 (8认同)

rav*_*nth 9

我知道您正在学习,但在来到这里之前,您需要使用Google-fu和文档.

$inputArray -contains $userinput
Run Code Online (Sandbox Code Playgroud)

  • Stackoverflow为Google,Mad Tom提供支持. (5认同)
  • 如果这是谷歌带给我的第一个地方呢? (4认同)
  • 谷歌富去这里:) (4认同)
  • `'a','b','c' -contains (Read-Host)` (2认同)

yzo*_*org 5

我一直在 powershell 中使用的有趣技巧:该echo命令会将未加引号的参数转换为字符串数组。

(echo a b c) -contains 'a'
# outputs True / returns $true
Run Code Online (Sandbox Code Playgroud)

这比打字容易@('a','b','c')。我的手指在每 2 个或第 3 个字符后输入 ' 的速度从未变快。