PowerShell 配列から重複値を削除する方法

  1. Select-Object を使用して PowerShell 配列から重複値を削除する
  2. Sort-Object を使用して PowerShell 配列から重複値を削除する
  3. Get-Unique を使用して PowerShell 配列から重複を削除する
  4. Hashtable を使用して PowerShell 配列から重複を削除する
  5. 結論
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-ObjectSort-ObjectGet-Unique コマンドレットを使用し、さらに Hashtable を利用することで、大文字小文字の区別の有無にかかわらず、特定の要件に応じてアプローチを調整できます。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - PowerShell Array