2013-06-25 44 views
2

我是新手Powershell用戶,希望對以下內容有所幫助:比較數組之間的值非常慢

我正在比較一個數組中的值與另一個數組中的值。如果它們匹配,我將值寫入單元格,如果不匹配,則單元格將突出顯示爲紅色。但是,只有兩個小數組(每個〜200個值)搜索需要數小時。必須有更好的方式,請幫助。

$ArrFinal = $arrA + $arrB + $arrC + $arrD 
$ArrFinal = $ArrFinal | select -uniq | sort-object 
for ($k=1; $k -lt $ArrFinal.length; $k++) 
{ 
for ($j=1; $j -lt $arrA.length; $j++) 
    { 
    if($ArrFinal[$k] -like $arrA[$j]) 
      { 
       $cells.item($k+1,2)=$arrA[$j] 
       $cells.item($k+1,2).Interior.ColorIndex = 2 
       break 
      } 
    else 
      { 
       $cells.item($k+1,2).Interior.ColorIndex = 3 
      } 
     } 
    } 

回答

3

假設你在這裏討論Excel:不要單獨爲每個單元格着色。在整個範圍內將ColorIndex設置爲3,只在實際更改其值時更改單元格的顏色。更好的是,使用conditional format,它會將空單元格與非空單元格區分開來。

另外我會放下內部循環。你要檢查2 第二數組包含從1 ST一個值,所以你可以只使用-contains操作,並從1 ST數組中的值寫入單元格($ArrFinal[$k]$arrA[$j]相等畢竟)。

$ArrFinal = $arrA + $arrB + $arrC + $arrD | select -uniq | sort-object 

for ($k=1; $k -lt $ArrFinal.length; $k++) { 
    if ($arrA -contains $ArrFinal[$k]) { 
    $cells.Item($k+1, 2) = $ArrFinal[$k] 
    $cells.Item($k+1, 2).Interior.ColorIndex = 2 
    } 
}