是否有更有效的方法来搜索特定值的多个数组?这不是那么糟糕,但如果我有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"}
答案 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
虽然我怀疑这个问题可能有更好的解决方案,但如果不了解更多信息就无法真正推测。