我一直试图弄清楚如何对多维数组中的所有元素进行计数。但是.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
如果不先处理数组怎么办?
答案 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
这种方式,它返回给定维度的行数,而不是返回维度数