首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PowerShell中对一个对象中的多个项目求和?

如何在PowerShell中对一个对象中的多个项目求和?
EN

Stack Overflow用户
提问于 2011-05-14 13:07:17
回答 2查看 73.1K关注 0票数 26

我有:

代码语言:javascript
复制
$report.gettype().name
Object[]

echo $report

Item                       Average
--                         -------
orange                     0.294117647058824
orange                    -0.901960784313726
orange                    -0.901960784313726
grape                      9.91335740072202
grape                      0
pear                       3.48736462093863
pear                      -0.0324909747292419
pear                      -0.0324909747292419
apple                     12.1261261261261
apple                     -0.0045045045045045

我想创建一个变量$total (例如哈希表),它包含每个项目的“Average”列的总和,例如,

代码语言:javascript
复制
echo $total

orange  -1.5097
grape    9.913
pear     3.423
apple   12.116

现在我正在考虑遍历$report,但它太难看了,我正在寻找比以下起点更优雅的东西(不完整):

代码语言:javascript
复制
$tmpPrev = ""
foreach($r in $report){
    $tmp = $r.item
    $subtotal = 0
    if($tmp <> $tmpPrev){
        $subtotal += $r.average
    }

我怎么能这样做呢?

EN

回答 2

Stack Overflow用户

发布于 2011-05-14 14:35:19

Cmdlet Group-ObjectMeasure-Object帮助以PowerShell式的方式解决任务:

代码:

代码语言:javascript
复制
# Demo input
$report = @(
    New-Object psobject -Property @{ Item = 'orange'; Average = 1 }
    New-Object psobject -Property @{ Item = 'orange'; Average = 2 }
    New-Object psobject -Property @{ Item = 'grape'; Average = 3 }
    New-Object psobject -Property @{ Item = 'grape'; Average = 4 }
)

# Process: group by 'Item' then sum 'Average' for each group
# and create output objects on the fly
$report | Group-Object Item | %{
    New-Object psobject -Property @{
        Item = $_.Name
        Sum = ($_.Group | Measure-Object Average -Sum).Sum
    }
}

输出:

代码语言:javascript
复制
Sum Item
--- ----
  3 orange
  7 grape
票数 62
EN

Stack Overflow用户

发布于 2011-05-14 13:26:34

我不知道你是否能摆脱循环。下面是什么:

代码语言:javascript
复制
$report | % {$averages = @{}} {
    if ($averages[$_.item]) {
        $averages[$_.item] += $_.average
    }
    else {
        $averages[$_.item] = $_.average
    }
} {$averages}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5999930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档