我的情况很简单,我有2个阵列,有3个元素。元素99%将是相同的,但顺序将是不同的。我需要知道订单是否正确/匹配。以下是简化情况。
[System.Collections.ArrayList] $aNICOrderOne = @("IBR","Service", "Admin")
[System.Collections.ArrayList] $aNICOrder = @("Service","IBR", "Admin")
$CompareNICOrderOne = Compare-Object $aNICOrder $aNICOrderOne -PassThru
if ("$CompareNICOrderOne" -eq "") {
Write-Host "All good"
} else {
Write-Host "Not good (expected $aNicOrderOne) - provided ($anicOrder)"
}
不幸的是上面返回“”这意味着在比较之后两个阵列都是相同的,理论上它们只是对我来说顺序很重要,在这种情况下它不是我想要的。
答案 0 :(得分:2)
如果你确定只有3个元素,你可以直接在循环中比较它们。设置一个标志,如果元素不匹配,您可以使用该标志。
$orderFlag = $false
for ($i = 0; $i -lt 3; $i++) {
if ($aNICOrderOne[$i] -ne $aNICOrder[$i] ) {
$orderFlag = $true
break
}
}
if($orderFlag) {
write-host "Order not correct"
}
else {
write-host "All good"
}
答案 1 :(得分:0)
这也可以使用 SyncWindow
参数解决。
❯ [System.Collections.ArrayList] $aNICOrderOne = @("IBR","Service", "Admin")
❯ [System.Collections.ArrayList] $aNICOrder = @("Service","IBR", "Admin")
❯ Compare-Object $aNICOrder $aNICOrderOne -PassThru -SyncWindow 0
IBR
Service
Service
IBR