2016-11-09 68 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!