2016-11-09 114 views
0

是否有可能在PowerShell中使用Compare-Object又名diff進行數組中項目的順序比較?如果沒有,建議一種解決方法。PowerShell命令敏感比較對象比較

[email protected](1,2,3,4,5) 
[email protected](1,2,3,5,4) 
if (Compare-Object $a1 $b1) { 
    Write-Host 'Wrong order ' 
} 
else { 
    Write-Host 'OK' 
} 
+0

如果($ a1 -ne $ b1){}在這種情況下不能使用?如果它們是相同的? – 4c74356b41

+0

難道你不能輕易對它們進行排序嗎? '$ a1 = $ a1 | sort-object'或通過get-Enumerator()如果你需要它們排序? –

+0

如果它們包含不同的東西,但都是按順序排列呢? – TessellatingHeckler

回答

0

您可以通過值比較陣列價值的物品,如:

[email protected](1,2,3,4,5,6,7,8,9,10) 
[email protected](1,2,3,5,4,6,7,9,8,10) 

$i= 0 
$counter = 0 
$obj = @() 

foreach ($a in $a1) 
{ 
    $sub_obj = New-Object PSObject 
    $sub_obj | Add-Member -MemberType NoteProperty -Name Value1 -Value $a  
    $sub_obj | Add-Member -MemberType NoteProperty -Name Value2 -Value $b1[$i] 
    if ($a -eq $b1[$i]) 
    { 
     $sub_obj | Add-Member -MemberType NoteProperty -Name IsMatch -Value $true 
    } 
    else 
    { 
     $sub_obj | Add-Member -MemberType NoteProperty -Name IsMatch -Value $false 
     $counter++ 
    } 
    $obj += $sub_obj 
    $i++ 
} 

Write-Output $obj | Format-Table -AutoSize 

if ($counter -gt 0) 
{Write-Host 'Wrong order!'} 
else 
{Write-Host 'Correct order!'} 

輸出:

Value1 Value2 IsMatch 
------ ------ ------- 
    1  1 True 
    2  2 True 
    3  3 True 
    4  5 False 
    5  4 False 
    6  6 True 
    7  7 True 
    8  9 False 
    9  8 False 
    10  10 True 


Wrong order!