请我需要帮助在PowerShell使用数组做到这一点。下面有一个类似$a的数组:
$a = @('**ABC**:XYZ','**LMN**:PQR','**ABC**:RST','YJQ:PRS','**LMN**:SDK')
我想将$a
数组更改为$b
:
$b = @('**ABC**:XYZ,RST','**LMN**:PQR,SDK','YJQ:PRS')
这个想法是所有在":"之前具有相同值的项应该以类似于"common_value:x,y,z"但那些没有共同价值观的国家就不应该管了。如有任何提示或解决方案,我将不胜感激。
一个简单的例子:
$a = @('**ABC**:XYZ','**LMN**:PQR','**ABC**:RST','YJQ:PRS','**LMN**:SDK')
$b=
$a |
Select-ObJect @{Name = 'Name'; Expression = { $_.Split(':')[0] }},
@{Name = 'Group'; Expression = { $_.Split(':')[1] }} |
Group-Object -Property Name |
ForEach-Object{ "'$($_.Name):$($_.Group.Group -join ',')'"}
$b = $b -join ','
$b
输出:
'**ABC**:XYZ,RST','**LMN**:PQR,SDK','YJQ:PRS'
$a = @('**ABC**:XYZ','**LMN**:PQR','**ABC**:RST','YJQ:PRS','**LMN**:SDK')
$b =
$a | Group-Object {$_.Split(':')[0]} |
ForEach-Object{
"'$($_.Name):$(($_.Group.Split(':') | Group-Object { $Global:i % 2; $Global:i++ })[1].Group -join ',')'"
}
$b = $b -join ','
$b
$b = $a | ConvertFrom-String -Delimiter ':' |
Group-Object P1 |
ForEach-Object { "$($_.name):$($_.group.P2 -join ',')" }
-
ConvertFrom-String
在':'处分割每个输入字符串,为':'之前和之后的部分创建一个具有P1
和P2
属性的对象 -
Group-Object
按':'前的部分分组 - 使用
ForEach-Object
,我们从':'之前的部分与':'之后的部分构建结果字符串