Powershell搜索多个变量数组

时间:2014-09-17 18:23:11

标签: arrays powershell

是否有更有效的方法来搜索特定值的多个数组?这不是那么糟糕,但如果我有50个阵列,它就会失控。我也想过做一个转换,但我希望有一种数组迭代方法。

$A = "A","B","C"
$B = "X","Y","Z"
$C = "B"

If ($A -contains $C) {$D = "Contained in Array A"}
ElseIF ($B -contains $C) {$D = "Contained in Array B"}

3 个答案:

答案 0 :(得分:2)

这是另一种动态更新的方式。

$A = "A","B","C"
$B = "X","Y","Z"
$C = "B"

$ArrayList = (get-variable) | ? {$_.value -is [array]}
Foreach ($Array in $ArrayList)
{
    if ($array.value -contains $c)
    {Write-Output "The array `$$($array.name) contains $C"}
}

答案 1 :(得分:0)

我可以想到其他方法,但一个简单的方法可能是这个

$A = "A","B","C"
$B = "X","Y","Z"
$C = "X"

$AllArrays = @{'A'=$A;'B'=$B}
$AllArrays.GetEnumerator() | ForEach-Object{
    If($_.Value -contains $C){
        Write-Host "Found In $($_.Name)"
    }
}

您可以构建所有数组的哈希表,然后循环遍历它。哈希表的每个.Value包含一个数组。您仍然使用-contains并从原始哈希表中报告该数组的名称。我们使用GetEnumerator方法,该方法有效地将哈希表中的每个条目作为单独的对象跨越管道发送。 仅供参考如果您的数组未被静态分配,您可以使用$AllArrays.Add('D',$D)

之类的内容构建哈希表
 Found In B

B来自哈希表中的'B'=$B这完全取决于您如何声明数组。根据阵列的填充方式,可能会有更简洁的方式。

<强>替代

您可以使用PsCustomObject代替哈希表。 注意此代码是在PowerShell 3.0中设计的,但是稍作更改将使其在早期版本中运行。在这个片段中,我删除了数组声明以简洁起见。

$allArrays = [PsCustomObject]@{
    'A'=$A
    'B'=$B
}

$allArrays.psobject.Properties | ForEach-Object{
    If($_.Value -contains $C){
        Write-Host "Found In $($_.Name)"
    }   
}

答案 2 :(得分:0)

回答问题:

$A = "A","B","C"
$B = "X","Y","Z"
$C = "B"

$D= @()

'A','B' |
foreach {
 if ((Get-Variable $_).value -eq $C) 
 { $D += "Contained in array $_"}
}

$D

Contained in array A

虽然我怀疑这个问题可能有更好的解决方案,但如果不了解更多信息就无法真正推测。