我有一大堆 DataRow 对象。数组中的每个对象都有 3 个属性;名字、姓氏和部门。一些对象具有相同的 FirstName 和 LastName,但部门不同。如果有重复,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