2013-05-20 21 views
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 

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

(1,5,6,8) 

如果没有这样的事情,有没有一种简单的方法做类似的事情而不用迭代两个数组?

回答

6

使用Compare-Object cmdlet来获取不同值的数组:

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

会不会只给我不同的价值观?我想找到在数组中找到差异的索引。 – EGr

+0

这是非常具体的我知道没有这样做的功能。迭代需要完成。如果你不这样做,你调用的函数将会。 –

+0

@格尔抱歉,我的误解。查看更新的答案。 –