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 を利用することで、大文字小文字の区別の有無にかかわらず、特定の要件に応じてアプローチを調整できます。
