问题描述
我想映射一个数组对象。我需要找到数组的匹配对象。对象匹配之后,我需要停止检查其他对象,然后继续进行下一个过程。
我尝试过此操作,但是即使数组对象匹配存在,它也总是返回不匹配。
$ID = @("8537","8538","8539","8540","85AC","85DE","82EA")
$Signal = @("8537","8220")
for ($i = 0; $i -lt $Signal.count; $i++)
{
if ($Signal[$i] -like "$ID[$i]")
{
"found ‘$($Signal[$i])’
at index $i"
# Do some process
}
else {
"Not Match"
# Do some process
}
}
解决方法
应该测试的东西:
cls
$ID = @("8538","8539","8540","85AC","85DE","82EA","8537")
$Signal = @("8537","8220","85DE")
for ($i = 0; $i -lt $ID.count; $i++) {
for ($j = 0; $j -lt $Signal.count; $j++) {
if ($ID[$i] -like $Signal[$j])
{
"found $($ID[$i]) at index $i"
# Do some process
}
else
{
"Not Match"
# Do some process
}
}
}
,
正如我在上面的评论中提到的-为了使您的示例正常工作,您可以使用如下嵌套循环:
$ID = @("8537","8538","82EA")
$Signal = @("8234","8512","8220")
$MatchFound = $false
for ($i = 0; $i -lt $Signal.count; $i++) {
for ($x = 0; $x -lt $ID.Count; $x++) {
if ($Signal[$i] -eq $ID[$x]) {
"found '$($Signal[$i])' at index $i"
$MatchFound = $true
}
}
}
if (-not $MatchFound) {
"No match was found"
}
如果您要比较复杂的对象,可以查看cmdlet Compare-Object。
,如果至少存在1个匹配对象,则需要进行匹配过程,可以尝试以下操作:
$ID = @("8538","85DE")
$matched = $false
for ($i = 0; $i -lt $ID.count; $i++) {
if ($matched) {
break
}
for ($j = 0; $j -lt $Signal.count; $j++) {
if ($ID[$i] -like $Signal[$j])
{
$matched = $true
"found $($ID[$i]) at index $i"
break
}
}
}
if ($matched) {
# Do some process
} else {
"Not Match"
# Do some process
}