Group-Object的输出的Name属性是否总是字符串?

时间:2015-09-18 15:05:59

标签: powershell

以下脚本可以通过第三列(x,y)转换(旋转)数组。但是,它需要连接group-object命令的前两列。然后需要拆分输出的Name以获得原始值。

如果数据具有分隔符,则可能容易出错。并且似乎没有性能优化,因为需要额外的字符串连接/拆分操作。在PowerShell中它是一种更直接的方式(如SQL组子句)吗?

$a =@('a','b','x',10), 
    @('a','b','y',20), 
    @('c','e','x',50), 
    @('c','e','y',30)

# $a | % { "[$_]"}

$a | %{ 
    new-object PsObject -prop @{
        label = "$($_[0]),$($_[1])" # Concatenate for grouping 
        value = @{ $_[2] = $_[3] }
        } 
} | 
group label | % {
    $l = @($_.Name -split ",") + # then split to restore
         @($_.Group.value.x, $_.Group.value.y) 
    "[$l]"
} 

1 个答案:

答案 0 :(得分:0)

是的,GroupInfo的“名称”属性始终是一个字符串。

查找不同值的最简单方法是示例每组中的第一项:

$a |Group-Object -Property {$_[0]},{$_[1]} |ForEach-Object {
    $Group = $_.Group

    # The first item in each group
    $SampleItem = $Group | Select-Object -First 1

    # Now we can inspect the key values, $SampleItem[0] and $SampleItem[1]
    Write-Host ('This group has {0} and {1} as primary keys:' -f $SampleItem[0..1]) -ForegroundColor Green

    $Group |ForEach-Object { 
        # echo each array in group
        Write-Host ($_ -join ' ')
    }
}

Yay!