it-swarm.com.de

Wenn Sie zwei Arrays vergleichen, erhalten Sie die Werte, die nicht üblich sind

ich wollte eine kleine Logik, um den Inhalt von zwei Arrays zu vergleichen und den Wert zu erhalten, der bei ihnen mit Powershell nicht üblich ist

beispiel wenn

[email protected](1,2,3,4,5)
[email protected](1,2,3,4,5,6)

$ c, das ist die Ausgabe, sollte den Wert "6" angeben, der die Ausgabe des ungewöhnlichen Werts zwischen den beiden Arrays ist.

Kann mir jemand mit dem gleichen helfen! Vielen Dank! 

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 enthält alle Elemente in $a, mit Ausnahme der Elemente, die sich in $b befinden:

PS C:\> $Yellow
1
2
3

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

$Blue enthält alle Elemente in $b, mit Ausnahme der Elemente, die sich in $a befinden:

PS C:\> $Blue
6
7
8

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

Nicht in Frage, aber trotzdem; Green enthält die Elemente, die sich sowohl in $a als auch in $b befinden.

PS C:\> $Green
4
5
31
iRon

Schau dir Compare-Object an

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

Oder wenn Sie wissen möchten, wo das Objekt gehört, dann schauen Sie sich SideIndicator an:

[email protected](1,2,3,4,5,8)
[email protected](1,2,3,4,5,6)
Compare-Object $a1 $b1
15
stej

Ihre Ergebnisse werden nicht hilfreich sein, es sei denn, die Arrays werden zuerst sortiert. Um ein Array zu sortieren, führen Sie es durch Sort-Object aus. 

$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

Versuchen:

[email protected](1,2,3,4,5)
[email protected](1,2,3,4,5,6)
(Compare-Object $a1 $b1).InputObject

Oder Sie können verwenden:

(Compare-Object $b1 $a1).InputObject

Die Reihenfolge spielt keine Rolle.

Dies sollte helfen, verwendet einfache Hashtabelle.

[email protected](1,2,3,4,5) [email protected](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