3

2 つの配列を比較し、両方の配列を繰り返し処理せずに、等しい値 (同じインデックスにある場合) を削除することは可能ですか? 以下に例を示します。

$array1 = @(1,2,3,4,5,6,7,23,44)
$array2 = @(1,1,3,4,5,7,6,23,45)

$array3 = $sudo_compare_function $array1 $array2

whereには、配列とは異なる$array3インデックスの配列が含まれるようになりました。$array2$array1

(1,5,6,8)

このようなものがない場合、両方の配列を反復せずに同様のことを行う簡単な方法はありますか?

4

1 に答える 1

6

コマンドレットを使用してCompare-Object、異なる値の配列を取得します。

$array1 = @(1,2,3,4,5,6,7,23,44)
$array2 = @(1,1,3,4,5,7,6,23,45)

$array3 = @(Compare-Object $array1 $array2 | select -Expand InputObject

対応するインデックスのみを比較するには、手動で比較する必要があります。

function Compare-Indexes($a1, $a2) {
  $minindex = [math]::Min($a1.Length, $a2.Length)
  $maxindex = [math]::Max($a1.Length, $a2.Length)

  for ($i = 0; $i -le $minindex; $i++) {
    if ( $a1[$i] -ne $a2[$i] ) { $i }
  }
  for ( $i = $minindex + 1; $i -le $maxindex; $i++ ) { $i }
}

$array1 = @(1,2,3,4,5,6,7,23,44)
$array2 = @(1,1,3,4,5,7,6,23,45)

$array3 = Compare-Indexes $array1 $array2
于 2013-05-20T20:34:17.527 に答える