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

Pow*_*ell 62 arrays powershell

我想要一个小逻辑来比较两个数组的内容,并使用powershell获取其中不常见的值

例如,如果

$a1=@(1,2,3,4,5)
$b1=@(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)

输出的$ c应该给出值" 6",这是两个数组之间不常见值的输出.

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

Sha*_*evy 98

PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru
PS > $c
6
Run Code Online (Sandbox Code Playgroud)

  • 给那些试图比较两个哈希表的Keys集合的人的注释:我假设Keys集合就像数组,并且可以使用Compare-Object比较它们。事实证明,Compare-Object将每个Keys集合视为一个对象,因此返回一个结果,指示哈希表1中的_ ** all ** _键从哈希表2中丢失,反之亦然。为了使其正常工作,我不得不将Keys集合转换为数组。我找到的最快方法是:`$ keys = @($ Null)* $ ht.Keys.Count`初始化一个正确大小的数组,然后将$$。Keys.CopyTo($ keys,0)初始化为将密钥复制到数组。 (2认同)

iRo*_*Ron 50

在此输入图像描述

$a = 1..5
$b = 4..8
Run Code Online (Sandbox Code Playgroud)

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

$Yellow包含除以下项目$a之外的所有项目$b:

PS C:\> $Yellow
1
2
3
Run Code Online (Sandbox Code Playgroud)

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

$Blue包含除以下项目$b之外的所有项目$a:

PS C:\> $Blue
6
7
8
Run Code Online (Sandbox Code Playgroud)

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

没问题,但无论如何; Green包含在双方的项目$a$b.

PS C:\> $Green
4
5
Run Code Online (Sandbox Code Playgroud)

  • 这个答案很美。从布景图片开始,他就能清晰地讲述黄、绿、蓝。然后介绍几种实现此目的的方法(带有基准!)。极好的。(我自己决定使用 Linq) (2认同)

ste*_*tej 15

看着 Compare-Object

Compare-Object $a1 $b1 | ForEach-Object { $_.InputObject }
Run Code Online (Sandbox Code Playgroud)

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

$a1=@(1,2,3,4,5,8)
$b1=@(1,2,3,4,5,6)
Compare-Object $a1 $b1
Run Code Online (Sandbox Code Playgroud)

  • 添加-PassThru选项可使输出更好.Compare-Object $ a1 $ b1 -PassThru (8认同)
  • @SimonTewsi:它们几乎是相同的:虽然“-PassThru”也传递感兴趣的输入元素,但它还用“SideIndicator”注释属性“装饰它们”,该属性可能会在意外情况下出现。尝试`(Compare-Object 1 2 -PassThru).SideIndicator`。 (2认同)