Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Powershell如何计算多维数组中的所有元素_Arrays_Arraylist_Multidimensional Array - Fatal编程技术网

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

Arrays Powershell如何计算多维数组中的所有元素,arrays,arraylist,multidimensional-array,Arrays,Arraylist,Multidimensional Array,我一直在想如何计算多维数组中的所有元素。但是.Count只返回第一个维度 在我放弃寻找合适的解决方案后,我创建了这个循环,将所有元素移动到第一维度,并对它们进行计数。但这真的只是一个黑客 $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) {

我一直在想如何计算多维数组中的所有元素。但是
.Count
只返回第一个维度

在我放弃寻找合适的解决方案后,我创建了这个循环,将所有元素移动到第一维度,并对它们进行计数。但这真的只是一个黑客

$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

如何在不首先处理数组的情况下正确执行此操作?

在循环中添加
$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

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

$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

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

e.g $xs[0].count

这样,它就不会返回维度计数,而是返回给定维度的行数

在进行一些测量之后,第一个选项似乎是最快的。最后两个看起来干净一点。感谢您提供多种解决方案。