如何在不迭代整个数组的情况下比较两个数组,删除相似的项目?

EGr*_*EGr 3 arrays powershell compare find powershell-2.0

是否可以比较两个数组并删除相等的值(如果它们在同一个索引处),而不迭代两个数组?这是一个例子:

$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
Run Code Online (Sandbox Code Playgroud)

其中$array3现在将包含索引的阵列,其中$array2来自不同的$array1数组:

(1,5,6,8)
Run Code Online (Sandbox Code Playgroud)

如果没有这样的东西,有没有一种简单的方法来做类似的事情而不需要遍历两个数组?

Ans*_*ers 6

使用Compare-Objectcmdlet获取不同值的数组:

$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
Run Code Online (Sandbox Code Playgroud)

要仅比较相应的索引,您必须手动进行比较:

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
Run Code Online (Sandbox Code Playgroud)