微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我尝试过此操作,但是即使数组对象匹配存在,它也总是返回不匹配。

$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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。