2つの配列の内容を比較し、powershellを使用してそれらの間で一般的ではない値を取得するための小さなロジックが必要でした
例
$a1=@(1,2,3,4,5)
$b1=@(1,2,3,4,5,6)
出力である$ cは、値「6
」を提供する必要があります。これは、両方の配列間で一般的でない値の出力です。
誰かが私を助けてくれますか?ありがとう!
PS > $c = Compare-Object -ReferenceObject (1..5) -DifferenceObject (1..6) -PassThru
PS > $c
6
$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
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
配列が最初にソートされない限り、結果は役に立ちません。配列を並べ替えるには、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)
試してください:
$a1=@(1,2,3,4,5)
$b1=@(1,2,3,4,5,6)
(Compare-Object $a1 $b1).InputObject
または、次を使用できます。
(Compare-Object $b1 $a1).InputObject
順序は関係ありません。
これは役立つはずで、単純なハッシュテーブルを使用します。
$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
}