PowerShell foreach()基于第一个元素的多维数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PowerShell foreach()基于第一个元素的多维数组相关的知识,希望对你有一定的参考价值。

我有一个相当基本的多维数组,看起来像这样:

2017,123 
2017,25
2018,5
2018,60
2017,11

我希望运行一个ForEach()循环或类似的函数来根据第一个元素中指示的年份对第二个元素中的数字进行总计,这样我最终会产生如下输出:

2017,159
2018,65

我怎样才能做到最好?

答案

以下解决方案简洁但不快:

# input array
$arr = 
  (2017,123),
  (2017,25),
  (2018,5),
  (2018,60),
  (2017,11)

# Group the sub-arrays by their 1st element and sum all 2nd elements
# in each resulting group.
$arr | Group-Object -Property { $_[0] } | ForEach-Object {
  , ($_.Name, (($_.Group | ForEach-Object { $_[1] } | Measure-Object -Sum).Sum))
}
另一答案

假设您的数组看起来像“$ array”,这将为您提供所需的内容:

$2017total = 0
$2018total = 0

$array = "2017,123",
"2017,25",
"2018,5",
"2018,60",
"2017,11" | % { 

if ($_ -match '2017') {
    $2017 = ($_ -split ',')[1]
    $2017total += $2017
}
else {
    $2018 = ($_ -split ',')[1]
    $2018total += $2018
} 
}

Write-Host "2017,$2017total"
Write-Host "2018,$2018total"

以上是关于PowerShell foreach()基于第一个元素的多维数组的主要内容,如果未能解决你的问题,请参考以下文章

在 PowerShell 中合并哈希表:如何?

PowerShell 中的嵌套 ForEach()

Hyper-v powershell 基于差异盘创建虚拟机

PowerShell/CLI:具有多个数组的“Foreach”循环

在PowerShell中使用foreach -parallel

Powershell foreach