比较两个数组并获取不常见的值

我想要一个小逻辑来比较两个数组的内容,并获得它们之间使用PowerShell不常见的值

例如if

$a1=@(1,2,3,4,5) $b1=@(1,2,3,4,5,6) 

$ c这是输出应该给我的价值“ 6 ”这是两个arrays之间不常见的价值输出。

有人能帮我解决这个问题吗? 谢谢!

 PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru PS > $c 6 

Compare-Object

 Compare-Object $a1 $b1 | ForEach-Object { $_.InputObject } 

或者,如果您想知道对象所属的位置,请查看SideIndicator:

 $a1=@(1,2,3,4,5,8) $b1=@(1,2,3,4,5,6) Compare-Object $a1 $b1 

$a | Where {$b -NotContains $_} $a | Where {$b -NotContains $_} #返回$ b中缺less$ b中的项目

$b | Where {$a -NotContains $_} $b | Where {$a -NotContains $_} #返回$ b中缺less$ a中的哪些项目

除非数组首先被sorting,否则结果将不会有帮助。 要sorting数组,请通过Sort-Object运行。

 $x = @(5,1,4,2,3) $y = @(2,4,6,1,3,5) Compare-Object -ReferenceObject ($x | Sort-Object) -DifferenceObject ($y | Sort-Object) 

尝试:

 $a1=@(1,2,3,4,5) $b1=@(1,2,3,4,5,6) (Compare-Object $a1 $b1).InputObject 

或者,您可以使用:

 (Compare-Object $b1 $a1).InputObject 

订单没有关系。

这应该有帮助,使用简单的哈希表。

 $a1=@(1,2,3,4,5) $b1=@(1,2,3,4,5,6) $hash= @{} #storing elements of $a1 in hash foreach ($i in $a1) {$hash.Add($i, "present")} #define blank array $c $c = @() #adding uncommon ones in second array to $c and removing common ones from hash foreach($j in $b1) { if(!$hash.ContainsKey($j)){$c = $c+$j} else {hash.Remove($j)} } #now hash is left with uncommon ones in first array, so add them to $c foreach($k in $hash.keys) { $c = $c + $k }