я могу думать о других способах, но просто один может быть это
$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, который эффективно отправляет каждую запись в хэш-таблицу по конвейеру как отдельный объект. FYI если ваши массивы не статически можно построить хэш-таблицу с чем-то вроде $AllArrays.Add('D',$D)
Found In B
The B
приходит из 'B'=$B
в хэш-таблице. Все зависит от того, как вы объявляете свои массивы. Могут быть более чистые способы в зависимости от того, как заполняются ваши массивы.
Alternative
Вместо Hashtable вы можете использовать PSCustomObject. Примечание Этот код был разработан в PowerShell 3.0, но небольшие изменения заставят его работать в более ранних версиях. В этом фрагменте я сократил объявления массива для краткости.
$allArrays = [PsCustomObject]@{
'A'=$A
'B'=$B
}
$allArrays.psobject.Properties | ForEach-Object{
If($_.Value -contains $C){
Write-Host "Found In $($_.Name)"
}
}
Удивительно, я собирался опубликовать что-то вроде этого, но не думал о сравнении с типом '[array]' и не мог обернуть мою голову альтернативным методом для этого. – TheMadTechnician
Я также пытался найти способ использовать 'get-variable', чтобы знать, что кто-то его получил. – Matt
Какую функцию выполняют скобки вокруг «массива»? -> [array] – Matt