比较两个数组并获取不常见的值
我想要一个小逻辑来比较两个数组的内容,并获得它们之间使用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 }