web-dev-qa-db-fra.com

Comparer deux tableaux et obtenir les valeurs qui ne sont pas communes

je voulais une petite logique pour comparer le contenu de deux tableaux et obtenir la valeur qui n'est pas commune parmi eux en utilisant PowerShell

exemple si

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

$ c qui est la sortie devrait me donner la valeur "6" qui est la sortie de ce qui est la valeur peu commune entre les deux tableaux.

Quelqu'un peut-il m'aider avec le même! Merci! 

51
PowerShell
PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru
PS > $c
6
88
Shay Levy

 enter image description here

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

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

$Yellow contient tous les éléments de $a à l'exception de ceux qui se trouvent dans $b:

PS C:\> $Yellow
1
2
3

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

$Blue contient tous les éléments de $b à l'exception de ceux qui se trouvent dans $a:

PS C:\> $Blue
6
7
8

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

Pas en question, mais quand même; Green contient les éléments qui se trouvent à la fois dans $a et $b.

PS C:\> $Green
4
5
31
iRon

Regardez Compare-Object

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

Ou si vous souhaitez savoir où l’objet appartient, consultez SideIndicator:

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

Vos résultats ne seront utiles que si les tableaux sont d'abord triés. Pour trier un tableau, exécutez-le via 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
doer

Essayer:

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

Ou, vous pouvez utiliser:

(Compare-Object $b1 $a1).InputObject

L'ordre n'a pas d'importance.

Cela devrait aider, utilise une table de hachage simple.

$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
}
0
Adithya Surampudi