Powershell如何计算多维数组中的所有元素

时间:2018-11-20 08:23:59

标签: arrays arraylist multidimensional-array

我一直试图弄清楚如何对多维数组中的所有元素进行计数。但是.Count仅返回第一维。

在我放弃寻找合适的解决方案之后,我刚刚创建了这个循环,将所有元素移至第一维并对其进行计数。但这实际上只是一个hack。

$mdarr = @((0,1,2,3,4),(5,6,7,8,9),(10,11,12,13,14))
$filecount = New-Object System.Collections.ArrayList
for($i = 0; $i -lt $mdarr.Length; ++$i) {
        $filecount += $mdarr[$i]
}
$filecount.Count

如果不先处理数组怎么办?

3 个答案:

答案 0 :(得分:1)

在循环中,您将添加$mdarr[$i]的元素。您稍后可以计算合并结果的元素。除了添加到ArrayList之外,您还可以保留一个计数:

$xs = @((0,1,2,3,4),(5,6,7,8,9),(10,11,12,13,14))
$sum = 0;
foreach ($x in $xs) { $sum += $x.Count }
$sum  // 15

# alternatively
$xs | % { $sum += $_.Count }

# or
($xs | % { $_.Count } | Measure-Object -Sum).Sum
# or
$xs | % { $_.Count } | Measure-Object -Sum | select -Expand Sum

答案 1 :(得分:0)

一行代码:可以将多维数组展平为匿名数组,并对匿名数组进行计数

$xs = @((0,1,2,3,4),(5,6,7,8,9),(10,11,12,13,14))
@($xs | ForEach-Object {$_}).count #result 15

或更具可读性的多行:

$xs = @((0,1,2,3,4),(5,6,7,8,9),(10,11,12,13,14))
$xs_flatten = @($xs | ForEach-Object {$_})
$xs_flatten_count = $xs_flatten.count
echo $xs_flatten_count #result 15

答案 2 :(得分:0)

在 .count 前面放一个维度标识符索引

e.g $xs[0].count

这种方式,它返回给定维度的行数,而不是返回维度数