3

是否可以比较两个数组并删除相等的值(如果它们位于相同的索引处),而无需遍历两个数组?这是一个例子:

$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-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

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

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 回答