我想要一个小逻辑来比较两个数组的内容&使用powershell
获取其中不常见的值示例如果
$a1=@(1,2,3,4,5)
$b1=@(1,2,3,4,5,6)
$ c这是输出应该给我值“6
”,它是两个数组之间不常见值的输出。
有人可以用同样的方式帮助我!谢谢!
答案 0 :(得分:92)
PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru
PS > $c
6
答案 1 :(得分:38)
$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
}