Сравнивая два массива и получи значения, которые не являются общими - PullRequest
59 голосов
/ 16 июня 2011

я хотел, чтобы небольшая логика сравнивала содержимое двух массивов и получала значение, которое не является обычным для них, используя powershell

пример, если

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

$ c, который является выводом, должен дать мне значение "6", которое является выводом необычного значения между обоими массивами.

Может кто-нибудь помочь мне с тем же! Спасибо!

Ответы [ 6 ]

96 голосов
/ 16 июня 2011
PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru
PS > $c
6
44 голосов
/ 08 марта 2016

enter image description here

$a = 1..5
$b = 4..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
15 голосов
/ 16 июня 2011

Посмотрите на 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
4 голосов
/ 07 ноября 2015

Ваши результаты не будут полезны, если массивы не будут сначала отсортированы.Чтобы отсортировать массив, запустите его через 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)
2 голосов
/ 11 марта 2014

Попробуйте:

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

Или вы можете использовать:

(Compare-Object $b1 $a1).InputObject

Порядок не имеет значения.

0 голосов
/ 16 июня 2011

Это должно помочь, использует простую хеш-таблицу.

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...