【问题标题】:Powershell how to count all elements in a multidimensional arrayPowershell如何计算多维数组中的所有元素
【发布时间】:2018-11-20 08:23:58
【问题描述】:

我一直试图弄清楚如何计算多维数组中的所有元素。但是.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

如果不先处理数组,如何正确完成?

【问题讨论】:

    标签: arrays arraylist multidimensional-array


    【解决方案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
    

    【讨论】:

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

    一行代码:可以将多维数组展平成匿名数组,并统计匿名数组

    $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
    

    【讨论】:

      【解决方案3】:

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

      e.g $xs[0].count
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 2016-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多