DataRow オブジェクトの大きな配列があります。配列内の各オブジェクトには 3 つのプロパティがあります。名、姓、および部門。一部のオブジェクトは、FirstName と LastName は同じですが、部門が異なります。重複がある場合、FirstName と LastName は何でもかまいませんが、オブジェクトの Department の 1 つが常に「Temp Employee」であり、もう 1 つは何でもかまいません。
FirstName/LastName に基づいてすべての重複オブジェクトを削除する必要がありますが、「一時従業員」部門ではない重複オブジェクトを保持するために重複が見つかった場合。
関数を作成しましたが、非常に時間がかかります。これを行うためのより良い方法が必要です。
function removeDupsFromSamData($aSamData) {
$aNoDups = @();
$aTemps = $aSamData | Where-Object { $_.Department -eq 'Temp Employee' } | % { "$($_.FirstName)|$($_.LastName)" }
$aFtes = $aSamData | Where-Object { $_.Department -ne 'Temp Employee' } | % { "$($_.FirstName)|$($_.LastName)" }
$aTempsAsFtes = Compare-Object $aTemps $aFtes | % { $_.InputObject }
$aUniqueEmps = @();
foreach ($i in $aTempsAsFtes) {
$sTempFname = $i.Split('|')[0]
$sTempLname = $i.Split('|')[1]
$aUniqueEmps += $aSamData | ? { ($_.LastName -eq $sTempLname) -and ($_.FirstName -eq $sTempFname) }
}##endforeach
return $aUniqueEmps
}##endfunction