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!
PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru
PS > $c
6
$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
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
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)
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
}