我有一个对象数组:
$people= @()
foreach ($person in $databaseOfGuests)
{
$people += @{ "FirstName"=$person.FirstName; "LastName"=$person.LastName }
}
现在我想删除$people
中的重复项,是否可以在PowerShell中执行此操作?类似的东西:
$people = $people | Select -Uniq
我有两个数组$people1
和$people2
,我需要获取$people1
但不在$people2
中的所有人的数组,反之亦然。类似的东西:
$peopleInPeople1ButNotInPeople2 = $people1.Substruct($people2)
$peopleInPeople2ButNotInPeople1 = $people2.Substruct($people1)
是否可以在PS中的一行中完成?
答案 0 :(得分:2)
试试这个:
$people1 | ? {$_ -notin $people2}
或者您可以按属性进行过滤,例如firstname或lastname:
$people1 | ? {$_.Firstname -notin $people2.Firstname}
-notin
运算符在PS3及更高版本上可用,对于较低版本,您可以使用-notcontains
答案 1 :(得分:0)
我的第一个想法是回退到.NET Framework并使用LINQ。但事实证明,PowerShell语法非常难看:
[Linq.Enumerable]::Except([object[]] $people1, [object[]] $people2)
(我不确定为什么object[]
强制转换是必要的,但如果没有它们,PowerShell会抛出“无法找到重载”除了“和参数count:”2“”异常。)
答案 2 :(得分:0)
惯用的PowerShell将是:
$people1 | Where-Object { $people2 -notcontains $_ }