2016-11-09 3 views
0

Compare-Object(別名diff)の配列内の項目の順序比較をPowerShellで行うことは可能ですか?回避策を提案してください。PowerShellの順序に敏感なCompare-Objects diff

[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

この場合、if($ 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! 
関連する問題