Avoid the duplicates by looking to see if the array already contains the value before adding the "Attribute" calue:
cls
$source = @(1, 2, 3, 3, 3)
$Entity = @(1, 1, 1, 2, 1)
$Attribute = @(1, 5, 6, 7, 7)
$UsedIn = @{}
Write-Host "Entity"
for ($i = 0; $i -lt $source.Count; $i++) {
if ($UsedIn.ContainsKey($source[$i])) {
$UsedIn[$source[$i]] += $Entity[$i]
}
else {
$UsedIn[$source[$i]] = , $Entity[$i]
}
}
$UsedIn
Write-Host "Attribute"
for ($i = 0; $i -lt $source.Count; $i++) {
if ($UsedIn.ContainsKey($source[$i])) {
if ($UsedIn[$source[$i]] -notcontains $Attribute[$i]) {
$UsedIn[$source[$i]] += $Attribute[$i]
}
}
else {
$UsedIn[$source[$i]] = , $Attribute[$i]
}
}
$UsedIn