C# の HashSet とリスト

Muhammad Maisam Abbas 2024年2月16日
  1. C# の HashSet<T>
  2. C# の List<T>
  3. C# の HashSet<T>List<T>
C# の HashSet とリスト

このチュートリアルでは、C# の HashSet<T>List<T> の相違点と類似点について説明します。

C# の HashSet<T>

セットの数学的な定義は、個別のオブジェクトの順序付けられていないコレクションです。C# の HashSet データ構造も同じ原則に従います。

HashSet は、特定の順序に従わない繰り返しのないオブジェクトのコレクションです。HashSet は通常、データに重複する値が必要ない場合に使用されます。

これは、System.Collection.Generic 名前空間に含まれる汎用コレクションです。

HashSet の利点は、ユニオン、交差、セット差などのすべてのセット操作を適用できることです。HashSet を使用することの顕著な欠点の 1つは、特定のシーケンスに従わないため、ソートできないことです。

次のコードスニペットは、C# でハッシュセットを操作する方法を示しています。

HashSet<int> weirdNumbers = new HashSet<int>();
weirdNumbers.Add(10);
weirdNumbers.Add(13);
weirdNumbers.Add(17);
weirdNumbers.Add(78);
weirdNumbers.Add(13);

Console.WriteLine("HashSet before removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}
weirdNumbers.Remove(13);
Console.WriteLine("HashSet after removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}

出力:

HashSet before removal
10
13
17
78
HashSet after removal
10
17
78

上記のコード例では、汎用ハッシュセットを作成し、それに値を挿入し、ハッシュセットから削除して、ハッシュセット内に出力する方法を示しました。

HashSet<T> クラス内の Add() 関数は、ハッシュセットに単一の値を挿入するために使用されます。Add() 関数に加えて、他の多くの便利な関数が HashSet<T> クラス内に提供されています。

Remove(T val) 関数は、ハッシュセットから val を削除します。値を入力パラメーターとして受け取り、ハッシュセットから削除します。

C# の List<T>

C# では、list は厳密に型指定されたオブジェクトのコレクションです。リストの要素には、インデックスを介してアクセスできます。

リストオブジェクトには、リストを並べ替え、検索、および変更するための多くの便利なメソッドが含まれています。これは、System.Collection.Generic 名前名に含まれています。

リストのもう 1つの利点は、コンパイル時の型チェックを提供し、汎用であるためボックス化/ボックス化解除を実行しないことです。データタイプ T のリストは、List<T> で初期化できます。

次のコードスニペットは、C# でリストを操作する方法を示しています。

List<int> weirdNumbers = new List<int>();
weirdNumbers.Add(10);
weirdNumbers.Add(17);
weirdNumbers.Add(78);
weirdNumbers.Add(13);
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}

出力:

10
17
78
13

上記のコードでは、最初の行の整数のリスト weirdNumbers を初期化し、Add() 関数を使用してリストに値を挿入し、foreach ループを使用してリスト内のすべての値を出力しました。

List<T> クラス内の Add() 関数は、リストに値を挿入するために使用されます。Add() 関数に加えて、他の多くの便利な関数が List<T> クラス内に提供されています。

AddRange() 関数は、既存のリストに別の配列またはリストを挿入できます。リストまたは配列を入力パラメーターとして受け取り、リストまたは配列の要素をプライマリリストの最後に追加します。

Insert() 関数を使用して、リスト内の指定されたインデックスに単一の値を挿入することもできます。Insert() 関数は、入力パラメーターとして整数インデックスと T タイプの値を取ります。

リストに新しい要素を追加することについて多くのことを話しました。リストから既存の要素を削除する方法について説明しましょう。

Remove(T val) 関数は、リスト内で最初に出現する val を削除します。値を入力パラメーターとして受け取り、インデックス 0 から始まるリスト内で最初に出現する値を削除します。

RemoveAt(int index) 関数は、リスト内の特定のインデックスの値を削除します。インデックスを入力パラメーターとして受け取り、配置された値をすべて削除します。

次のコードスニペットは、説明したすべての機能をすっきりとした小さなブロックにまとめています。

List<int> weirdNumbers = new List<int>();
weirdNumbers.Add(10);
weirdNumbers.Add(17);
weirdNumbers.Add(78);
weirdNumbers.Add(13);
weirdNumbers.Insert(3, 31);
Console.WriteLine("List before removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}
weirdNumbers.Remove(31);
weirdNumbers.RemoveAt(1);
Console.WriteLine("List after removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}

出力:

List before removal
10
17
78
31
13
List after removal
10
78
13

上記のコード例では、汎用リストを作成し、それに値を挿入し、リストから値を削除し、リスト内の値を出力する方法を示しました。

C# の HashSet<T>List<T>

リストとハッシュセットには、それぞれ長所と短所があります。ハッシュセットは大量のデータのリストよりもはるかに高速ですが、リストはインデックス機能を提供します。

リストを並べ替えることはできますが、ハッシュセットはセット操作を実行する機能を提供します。

要約すると、リストまたはハッシュセットの選択は、問題に完全に依存します。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Csharp List