はじめに
以前に「【C#】和集合、積集合、差集合、対象差を求める」という記事を書きましたが、この記事が思ったよりも高評価(※2024/06/07時点で34いいね)でした。
そこで勉強がてら、同様の処理をPowerShellで実装してみた結果を記事としてまとめてみました。
テストコード
- 単にPowerShellで書くのではなく、ワンライナーでLINQのような形にしてみました。
- 和集合(Union)では、
-Unique
を使って重複を削除しています。 - 積集合や差集合はどのように実装すべきか悩みましたが、
Where-Object
を使って「条件にマッチする要素のみ抽出する」ことができたため、どうにか課題をクリアできました。
test.ps1
$list1 = @("Tokyo", "Osaka", "Yokohama", "Nagoya", "Kobe")
$list2 = @("Tokyo", "Yokohama", "Sapporo", "Fukuoka")
Write-Host ("和集合(Union):" + (($list1 + $list2) | Select-Object -Unique))
Write-Host ("和集合(Concat):" + ($list1 + $list2))
Write-Host ("積集合(Intersect):" + ($list1 | Where-Object { $list2 -contains $_ } ))
Write-Host ("差集合(Except)[list1-list2]:" + ($list1 | Where-Object { $list2 -notcontains $_ } ))
Write-Host ("差集合(Except)[list2-list1]:" + ($list2 | Where-Object { $list1 -notcontains $_ } ))
実行結果
和集合(Union):Tokyo Osaka Yokohama Nagoya Kobe Sapporo Fukuoka
和集合(Concat):Tokyo Osaka Yokohama Nagoya Kobe Tokyo Yokohama Sapporo Fukuoka
積集合(Intersect):Tokyo Yokohama
差集合(Except)[list1-list2]:Osaka Nagoya Kobe
差集合(Except)[list2-list1]:Sapporo Fukuoka