Arrays 在powershell中通过多个数组搜索名称
因此,我有几个数组,其中包含我想要搜索的名称,我希望将这些数组分开,因为它们每个都特定于某一组名称。我正试图找出如何同时搜索多个。下面的代码是如何搜索一个数组,但我不确定搜索多个数组的最佳方法。我试图将Arrays 在powershell中通过多个数组搜索名称,arrays,powershell,search,foreach,Arrays,Powershell,Search,Foreach,因此,我有几个数组,其中包含我想要搜索的名称,我希望将这些数组分开,因为它们每个都特定于某一组名称。我正试图找出如何同时搜索多个。下面的代码是如何搜索一个数组,但我不确定搜索多个数组的最佳方法。我试图将-和$array2添加到foreach中,但没有成功 我知道我可以为每个数组添加相同的块,但我想知道是否有更干净、更有效的方法来做到这一点 $array1 = "name1", "name2", "name3" $array2 = "name4", "name5", "name6" $search
-和$array2
添加到foreach中,但没有成功
我知道我可以为每个数组添加相同的块,但我想知道是否有更干净、更有效的方法来做到这一点
$array1 = "name1", "name2", "name3"
$array2 = "name4", "name5", "name6"
$searchname = Read-Host "Enter the name to search for"
foreach($name in $array1){
if($searchname -eq $name){
Write-Host "$searchname found"
}
}
如果要跨多个数组中的项目进行搜索,可以在
foreach
语句中连接数组,如下所示:
foreach($name in @($array1;$array2)){
if($searchname -eq $name){
Write-Host "$searchname found"
}
}
更具PowerShell风格的方法需要将管道与Where-Object
filter cmdlet一起使用:
@($array1;$array2) |Where-Object {$_ -eq $searchname}
如果要跨多个数组中的项目进行搜索,可以在
foreach
语句中连接数组,如下所示:
foreach($name in @($array1;$array2)){
if($searchname -eq $name){
Write-Host "$searchname found"
}
}
更具PowerShell风格的方法需要将管道与Where-Object
filter cmdlet一起使用:
@($array1;$array2) |Where-Object {$_ -eq $searchname}
如果您只需要验证名称是否存在于任何数组中,您只需将它们连接起来,然后检查结果是否包含您要查找的名称:
if (($array1 + $array2) -contains $name) {
Write-Host "$name found"
}
如果要标识找到它的阵列,可以执行以下操作:
'array1', 'array2' | ForEach-Object {
if ((Get-Variable $_).Value -contains $name) {
Write-Host "$name found in `$$_"
break
}
}
或者像这样,如果数组存储在哈希表中而不是单个变量中:
$hash = @{
array1 = "name1", "name2", "name3"
array2 = "name4", "name5", "name6"
}
$hash.GetEnumerator() | ForEach-Object {
if ($_.Value -contains $name) {
Write-Host ('{0} found in ${1}' -f $name, $_.Name)
break
}
}
如果您只需要验证名称是否存在于任何数组中,您只需将它们连接起来,然后检查结果是否包含您要查找的名称:
if (($array1 + $array2) -contains $name) {
Write-Host "$name found"
}
如果要标识找到它的阵列,可以执行以下操作:
'array1', 'array2' | ForEach-Object {
if ((Get-Variable $_).Value -contains $name) {
Write-Host "$name found in `$$_"
break
}
}
或者像这样,如果数组存储在哈希表中而不是单个变量中:
$hash = @{
array1 = "name1", "name2", "name3"
array2 = "name4", "name5", "name6"
}
$hash.GetEnumerator() | ForEach-Object {
if ($_.Value -contains $name) {
Write-Host ('{0} found in ${1}' -f $name, $_.Name)
break
}
}
-in
运算符:$value-in$array
或者PS2+
-contains
运算符:$array-contains$value
$arrays = @(
@("name1", "name2", "name3")
@("name4", "name5", "name6")
)
$searchname = Read-Host "Enter the name to search for"
1..$arrays.count | ForEach {
if ($searchname -in $arrays[$_-1]) {
Write-Host "$searchname found in array #$_"
}
}
$arrays = @{
foo = "name1", "name2", "name3"
bar = "name4", "name5", "name6"
}
$searchname = Read-Host "Enter the name to search for"
ForEach ($entry in $arrays.GetEnumerator()) {
if ($searchname -in $entry.value) {
Write-Host "$searchname found in array $($entry.key)"
}
}
-in
运算符:$value-in$array
或者PS2+
-contains
运算符:$array-contains$value
$arrays = @(
@("name1", "name2", "name3")
@("name4", "name5", "name6")
)
$searchname = Read-Host "Enter the name to search for"
1..$arrays.count | ForEach {
if ($searchname -in $arrays[$_-1]) {
Write-Host "$searchname found in array #$_"
}
}
$arrays = @{
foo = "name1", "name2", "name3"
bar = "name4", "name5", "name6"
}
$searchname = Read-Host "Enter the name to search for"
ForEach ($entry in $arrays.GetEnumerator()) {
if ($searchname -in $entry.value) {
Write-Host "$searchname found in array $($entry.key)"
}
}
你的问题有点不清楚。是否希望能够将成员身份赋予特定数组?或者您只是想知道任何数组中是否存在一个名称?只需知道该名称是否存在。例如,我会搜索“name64”,但找不到,很酷。我会搜索“name3”,它返回“name3 found”。我可以为一个数组获得它,只是不确定是否有更好的方法来搜索多个数组,而不必为每个不同的数组反复执行相同的foreach\if语句。您的问题有点不清楚。是否希望能够将成员身份赋予特定数组?或者您只是想知道任何数组中是否存在一个名称?只需知道该名称是否存在。例如,我会搜索“name64”,但找不到,很酷。我会搜索“name3”,它返回“name3 found”。我可以为一个数组获得它,只是不确定是否有更好的方法来搜索多个数组,而不必为每个不同的数组反复执行相同的foreach\if语句。目前还不清楚OP在搜索结果方面寻找的是什么。你认为他不想知道它来自哪个阵列吗?。。。他回答得很好,谢谢!这就是我要找的!只是好奇,但是通过这样做,你怎么能把它缩小到找到名字的数组中?@马特:是的,还不清楚,我只是假设他在寻找一个布尔答案。目前还不清楚OP在寻找什么结果。你认为他不想知道它来自哪个阵列吗?。。。他回答得很好,谢谢!这就是我要找的!只是好奇,但这样做,你怎么能把它缩小到找到名字的数组中?@马特:是的,还不清楚,我只是假设他在寻找一个布尔答案谢谢,太完美了!!谢谢,太好了!!