所以我有一些我希望搜索的名称数组,我想将这些数组分开,因为它们都是特定于某组名称的。我试图弄清楚如何同时搜索多个。我下面的代码是如何搜索一个数组,但我不确定搜索多个数据的最佳方法。我试图将-and $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"
}
}
答案 0 :(得分:3)
如果您只需要验证该名称是否存在于任何数组中,您只需将它们连接起来并检查结果是否包含您要查找的名称:
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
}
}
答案 1 :(得分:2)
如果要搜索多个数组中的项目,可以在foreach
语句中连接数组,如下所示:
foreach($name in @($array1;$array2)){
if($searchname -eq $name){
Write-Host "$searchname found"
}
}
更加PowerShell惯用的方法需要使用带有Where-Object
过滤器cmdlet的管道:
@($array1;$array2) |Where-Object {$_ -eq $searchname}
答案 2 :(得分:0)
@Html.Partial("~/Views/Customer/CreateModal.cshtml")
运算符:-in
$value -in $array
运算符:-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 #$_"
}
}