从变量中删除重复条目

问题描述

我有一个邮件变量,内容是这样的

if ($user -eq 'abc') {$mail += 'abc@ae.com;'}
elseif ($user -eq 'efg') {$mail += 'efg@ae.com;'}
elseif ($user -eq 'hij') {$mail += 'hij@ae.com;'}
elseif ($user -eq 'klm') {$mail += 'klm@ae.com;'}

现在 $mail 变量会有这样的内容 abc@ae.com;klm@ae.com;abc@ae.com;hij@ae.com;klm@ae.com

如何从 $mail 变量中删除重复的邮件。尝试了以下但没有运气。

$mail = $mail | select -unique
$mail | sort | Get-Unique

解决方法

我将使用 -split 运算符获取邮件数组,然后使用 Select-Object -unique cmdlet 删除重复项,最后将数组连接回所需的字符串:

('abc@ae.com;klm@ae.com;abc@ae.com;hij@ae.com;klm@ae.com' -split ';' | Select-Object -Unique) -join ';'

输出:

abc@ae.com;klm@ae.com;hij@ae.com
,

Split + Select-Object -Unique 完成工作

("abc@ae.com;klm@ae.com;abc@ae.com;hij@ae.com;klm@ae.com".Split(';') |Select-Object -Unique) -join ";"

你可以直接使用 linq:

$arr = "abc@ae.com;klm@ae.com;abc@ae.com;hij@ae.com;klm@ae.com".Split(";")
[Linq.Enumerable]::Distinct($arr) -join ";"