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

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