我有一个对象数组,这些对象具有属性“ ID”,“代码”和“金额”。我需要获取一个对象数组,其中每个唯一的ID和代码对都具有Amount属性之和。例如,看起来如下的数组:
ID,Code,Amount
abc,123,10
abc,124,10
abc,123,20
def,124,20
应该最终看起来像这样:
ID,Code,Amount
abc,123,30
abc,124,10
def,124,20
顺序无关紧要。
我已经编写了执行此操作的代码,但是它很长,对于尝试执行的操作来说似乎不必要地复杂。代码如下:
相关代码可以在这里找到:
#Get unique users
$userArray = @()
foreach($item in $resultsarray) {
$alreadyInUserArray = $false
foreach($user in $userArray) {
if($user -like $item.'ID') {
$alreadyInUserArray = $true
}
}
if ($alreadyInUserArray) {
}
else {
$userArray += $item.'ID'
}
}
#Get unique codes
$codeArray = @()
foreach($item in $resultsarray) {
$alreadyInCodeArray = $false
foreach($code in $codeArray) {
if($code -like $item.'Code') {
$alreadyInCodeArray = $true
}
}
if ($alreadyInCodeArray) {
}
else {
$codeArray += $item.'Code'
}
}
#Sum up entries by unique combination of user and code
$cumulativeArray = @()
foreach ($item in $resultsarray) {
$alreadyInCumulativeArray = $false
foreach($result in $cumulativeArray) {
if(($item.'ID' -eq $result.'ID') -and ($item.'Code' -eq $result.'Code')) {
$alreadyInCumulativeArray = $true
$result.'Amount' += $item.'Amount'
}
}
if ($alreadyInCumulativeArray) {
}
else {
$cumulativeArray += $item
}
}
这对我来说是正确的,但是它涉及遍历数组很多次,这似乎效率很低。我正在寻找解决此问题的更好方法。