Arrays 如何使用PowerShell映射2个对象数组?

Arrays 如何使用PowerShell映射2个对象数组?,arrays,powershell,loops,object,match,Arrays,Powershell,Loops,Object,Match,我想映射一个数组对象。我需要找到数组中匹配的对象。在对象匹配之后,我需要停止检查其他对象,然后继续下一个过程 我尝试了这个方法,但它总是返回not match,即使数组对象匹配存在 $ID = @("8537", "8538", "8539", "8540", "85AC", "85DE", "82EA") $Signal = @("8537&qu

我想映射一个数组对象。我需要找到数组中匹配的对象。在对象匹配之后,我需要停止检查其他对象,然后继续下一个过程

我尝试了这个方法,但它总是返回not match,即使数组对象匹配存在

$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", "8539", "8540", "85AC", "85DE", "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。

如果至少存在一个匹配对象,则需要执行匹配过程,可以尝试以下操作:

$ID = @("8538", "8539", "8540", "85AC", "85DE", "82EA","8537")
$Signal = @("8537","8220","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
}

看起来这只是一个更复杂任务的例子,不是吗?您可以查看cmdlet
比较对象
。它是为比较对象而设计的。;-)为了让你的例子有效,我认为你应该使用嵌套循环。嗨,谢谢你的建议。非常感谢。但若我像你们的建议那个样使用嵌套循环,它总是转到不匹配进程,即使我有一个对象匹配,但它永远不会转到匹配进程。我的期望是,如果我至少有一个匹配对象,那么它将进入匹配过程,而不需要检查其他对象@如果我运行我在这里发布的代码,我得到一个匹配项。你能用我发布的代码试试吗?是的,我试过了。它匹配1个对象,但不匹配进程,它不匹配进程@OlafI实际上不知道你的意思。我添加了我得到的输出。嗨,谢谢你的建议。非常感谢。但如果我像你建议的那样使用,它总是进入不匹配过程,即使我有一个对象匹配,但它永远不会进入匹配过程。我的期望是,如果我至少有一个匹配对象,那么它将进入匹配过程,而不需要检查其他对象@哈库