PowerShell 配列から重複値を削除する方法
-
Select-Object
を使用して PowerShell 配列から重複値を削除する -
Sort-Object
を使用して PowerShell 配列から重複値を削除する -
Get-Unique
を使用して PowerShell 配列から重複を削除する -
Hashtable
を使用して PowerShell 配列から重複を削除する - 結論

配列は、同じ型または異なる型のアイテムのコレクションを格納できる PowerShell の基本的なデータ構造です。さまざまなスクリプトシナリオでは、配列から重複したアイテムを削除する必要が生じることがあります。
このチュートリアルでは、PowerShell の配列から重複を削除するためのさまざまな方法を紹介します。
Select-Object
を使用して PowerShell 配列から重複値を削除する
Select-Object
コマンドレットは、オブジェクトまたはオブジェクトのセットの指定されたプロパティを選択するために使用されます。また、配列内の指定された位置にあるユニークなオブジェクトを選択することもできます。
-Unique
パラメーターは、オブジェクト内に同一のプロパティと値が存在する場合、1つのメンバーのみを選択することを指定します。これは大文字小文字を区別するため、文字の大文字小文字が異なるだけの文字列もユニークな値と見なされます。
重複したアイテムを異なるケースで持つ配列 $data
を作成しました。
$data = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
次の例では、配列からユニークな値を選択し、それらを $data
変数に保存します。この結果、配列から重複する要素が削除されます。
コマンド:
$data = $data | Select-Object -Unique
$data
出力:
powershell
arrays
Arrays
PowerShell
重複する文字列"powershell"
は削除されますが、文字列に大文字の文字が含まれているため、"PowerShell"
は削除されません。
Sort-Object
を使用して PowerShell 配列から重複値を削除する
Sort-Object
コマンドレットは、オブジェクトをプロパティ値に基づいて昇順または降順にソートします。Sort-Object
でも、-Unique
パラメーターを使用して、オブジェクトから重複を削除できます。
ただし、このコマンドレットは大文字小文字を区別しないため、文字の大文字小文字が異なるだけの文字列も同じと見なされます。次の例では、配列から重複アイテムを削除し、それを変数 $a
に保存します。
コマンド:
$a = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$a = $a | Sort-Object -Unique
$a
出力:
Arrays
PowerShell
大文字小文字が異なるだけのため、"Arrays"
と "PowerShell"
は削除されます。Sort-Object
を大文字小文字を区別するように設定するには、-CaseSensitive
パラメーターを使用できます。
コマンド:
$b = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$b = $b | Sort-Object -Unique -CaseSensitive
$b
出力:
arrays
Arrays
powershell
PowerShell
これにより、出力は重複があるのは"powershell"
だけであるため、それだけが削除されます(大文字小文字を区別した場合)。
Get-Unique
を使用して PowerShell 配列から重複を削除する
Get-Unique
コマンドレットは、ソートされたリストからユニークなアイテムを取得します。これは、ソートされたリスト内の各アイテムを次のアイテムと比較し、重複を削除し、各アイテムの 1つのメンバーのみを返します。
このコマンドレットは、リストがソートされている場合にのみ機能します。Sort-Object
コマンドレットを使用して、プロパティ値に基づいてオブジェクトをソートできます。
次の例では、Sort-Object
を使用して配列要素をソートした後、Get-Unique
コマンドレットを使用して配列 $sort
から重複アイテムを削除します。
コマンド:
$c = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$c = $c | Sort-Object | Get-Unique
$c
出力:
Arrays
arrays
PowerShell
powershell
この出力では、"powershell"
が削除されます。
Get-Unique
は大文字小文字を区別するため、文字の大文字小文字が異なるだけの文字列もユニークな値と見なされます。このようにして、PowerShell で配列から重複要素を簡単に削除することができます。
Hashtable
を使用して PowerShell 配列から重複を削除する
PowerShell では、重複を効率的に削除するために Hashtable
を利用できます。Hashtable
は、ユニークなキーを持つキーと値のペアを格納します。Hashtable
を作成し、配列アイテムをキーとして使用することで、重複を自動的に削除できます。
次の例では、空の Hashtable
($uniqueHash
)を初期化し、その後、配列を繰り返し処理し、各アイテムを Hashtable
のキーとして設定します。キーはユニークでなければならないため、重複は自動的に排除されます。
結果は変数 $uniqueArray
に保存されます。
$array = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$uniqueHash = @{}
$array | ForEach-Object { $uniqueHash[$_] = $true }
$uniqueArray = $uniqueHash.Keys
$uniqueArray
出力:
powershell
arrays
この出力では、Hashtable
を使用して重複が削除され、残りの値が表示されます。重複を削除するために Hashtable
を使用する場合、値の大文字小文字の区別は考慮されないことに注意してください。
結論
PowerShell では、配列内の重複値の管理は一般的なタスクであり、この記事ではそれを達成するためのいくつかの方法を紹介しました。Select-Object
、Sort-Object
、Get-Unique
コマンドレットを使用し、さらに Hashtable
を利用することで、大文字小文字の区別の有無にかかわらず、特定の要件に応じてアプローチを調整できます。