比较数组之间的值非常慢

时间:2013-06-25 21:12:12

标签: arrays performance powershell

我是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
            }
      }
  }

1 个答案:

答案 0 :(得分:3)

假设您在这里谈论Excel:不要单独为每个单元格着色。对于整个范围,将ColorIndex设置为3,并且仅在实际更改其值时更改单元格的颜色。更好的是,使用conditional format将空单元格与非空单元格区别开来。

我也放弃了内循环。您想要检查2 nd 数组是否包含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
  }
}