比较两个数组&得到不常见的值

时间:2011-06-16 07:19:12

标签: arrays powershell

我想要一个小逻辑来比较两个数组的内容&使用powershell

获取其中不常见的值

示例如果

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

$ c这是输出应该给我值“6”,它是两个数组之间不常见值的输出。

有人可以用同样的方式帮助我!谢谢!

6 个答案:

答案 0 :(得分:92)

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

答案 1 :(得分:38)

enter image description here

$a = 1,2,3,4,5
$b = 4,5,6,7,8

$Yellow = $a | Where {$b -NotContains $_}

$Yellow 包含$a中的所有项目,但$b中的项目除外:

PS C:\> $Yellow
1
2
3

$Blue = $b | Where {$a -NotContains $_}

$Blue 包含$b中的所有项目,但$a中的项目除外:

PS C:\> $Blue
6
7
8

$Green = $a | Where {$b -Contains $_}

没有问题,但无论如何; Green 包含$a$b中的项目。

PS C:\> $Green
4
5

答案 2 :(得分:15)

查看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

答案 3 :(得分:4)

除非首先对数组进行排序,否则您的结果将无济于事。 要对数组进行排序,请通过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)

答案 4 :(得分:2)

尝试:

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

或者,您可以使用:

(Compare-Object $b1 $a1).InputObject

订单无关紧要。

答案 5 :(得分:0)

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

$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
}