以下脚本可以通过第三列(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]"
}
答案 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 ' ')
}
}