PowerShell合并对象数组:去重且不丢失信息的实现方法
PowerShell 合并重复Num对象并去重Text内容
先看模拟你场景的示例输入数组:
$originalArray = @( [PSCustomObject]@{ Num = 1; Text = "Apple" }, [PSCustomObject]@{ Num = 2; Text = "Banana" }, [PSCustomObject]@{ Num = 1; Text = "Orange" }, [PSCustomObject]@{ Num = 2; Text = "Banana" }, [PSCustomObject]@{ Num = 3; Text = "Grape" }, [PSCustomObject]@{ Num = 1; Text = "Apple" } )
直接通过分组+去重合并即可实现需求,代码如下:
$resultArray = $originalArray | Group-Object Num | ForEach-Object { # 提取当前组所有Text内容,去重后合并为字符串 $uniqueTexts = $_.Group.Text | Select-Object -Unique $mergedText = $uniqueTexts -join ", " # 生成包含唯一Num和合并后Text的新对象 [PSCustomObject]@{ Num = [int]$_.Name # 转换回数字类型,避免Group-Object返回的Name为字符串 Text = $mergedText } } # 输出最终结果 $resultArray
关键逻辑说明:
Group-Object Num:将数组按Num属性分组,所有相同Num的对象会被归为同一组。Select-Object -Unique:对每组内的Text去重,保留内容的首次出现顺序;若需要排序后去重,可替换为Sort-Object -Unique。-join ", ":将去重后的Text合并为单个字符串,分隔符可自定义(比如换行符"n"、分号"; "`等)。[int]$_.Name:修正Group-Object返回的Name属性类型,确保Num保持原始数字类型。
示例输出:
Num Text --- ---- 1 Apple, Orange 2 Banana 3 Grape
内容的提问来源于stack exchange,提问作者TheRob87
相关产品推荐
相关产品推荐

