C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のHashSetで要素数を取得する方法|Countプロパティの使い方を解説

C#のHashSetの要素数を取得する方法

C#のHashSet<T>に格納されている要素の数を取得するには、Countプロパティを使用します。Countプロパティは、HashSet内に現在存在する要素の個数をint型で返します。

HashSetは重複する要素を自動的に排除するコレクションです。そのため、同じ値を何度Addしても要素数は増えず、ユニークな値だけがカウントされます。この挙動については、後半の文字列の例で実際に確認できます。

例1:整数のHashSetで要素数を取得する

まずはint型のHashSetを使った基本的な例です。Countプロパティのほかに、Overlapsメソッド(共通要素の有無を判定)やContainsメソッド(特定要素の存在チェック)の使い方も併せて確認してみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(25);
      set1.Add(50);
      set1.Add(75);
      set1.Add(100);
      set1.Add(125);
      set1.Add(150);
      Console.WriteLine("HashSet1の要素一覧");
      foreach(int val in set1) {
         Console.WriteLine(val);
      }
      Console.WriteLine("HashSet1の要素数 = "+set1.Count);

      HashSet<int> set2 = new HashSet<int>();
      set2.Add(30);
      set2.Add(60);
      set2.Add(100);
      set2.Add(150);
      set2.Add(200);
      set2.Add(250);
      Console.WriteLine("HashSet2の要素一覧");
      foreach(int val in set2) {
         Console.WriteLine(val);
      }
      Console.WriteLine("HashSet2の要素数 = "+set2.Count);

      Console.WriteLine("共通する要素は存在するか? "+set1.Overlaps(set2));
      Console.WriteLine("HashSet1に要素60は含まれるか? "+set1.Contains(60));
      Console.WriteLine("HashSet2に要素60は含まれるか? "+set2.Contains(60));
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

HashSet1の要素一覧
25
50
75
100
125
150
HashSet1の要素数 = 6
HashSet2の要素一覧
30
60
100
150
200
250
HashSet2の要素数 = 6
共通する要素は存在するか? True
HashSet1に要素60は含まれるか? False
HashSet2に要素60は含まれるか? True

set1とset2はどちらも6個の要素を持ち、100と150という共通の要素を含むため、OverlapsメソッドはTrueを返しています。また、60はset1には存在しないのでContainsの結果がFalseとなり、set2には存在するのでTrueとなります。

例2:文字列のHashSetと重複排除・IsSupersetOfメソッド

続いてstring型のHashSetの例です。「AB」と「EF」はそれぞれ2回Addされていますが、HashSetは重複を許さないため、要素数にはカウントされません。さらに、片方の集合がもう片方の上位集合(スーパーセット)かどうかを判定できるIsSupersetOfメソッドの使い方も見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      HashSet<string> set1 = new HashSet<string>();
      set1.Add("AB");
      set1.Add("CD");
      set1.Add("EF");
      set1.Add("AB"); // 重複のため追加されない
      set1.Add("IJ");
      set1.Add("KL");
      set1.Add("EF"); // 重複のため追加されない
      set1.Add("OP");
      Console.WriteLine("HashSet1の要素一覧");
      foreach(string val in set1) {
         Console.WriteLine(val);
      }
      Console.WriteLine("HashSet1の要素数 = "+set1.Count);

      HashSet<string> set2 = new HashSet<string>();
      set2.Add("EF");
      set2.Add("KL");
      Console.WriteLine("HashSet2の要素数 = "+set2.Count);
      Console.WriteLine("HashSet2の要素一覧");
      foreach(string val in set2) {
         Console.WriteLine(val);
      }

      Console.WriteLine("set1はset2の上位集合か? "+set1.IsSupersetOf(set2));
   }
}

出力結果

実行結果は以下の通りです。

HashSet1の要素一覧
AB
CD
EF
IJ
KL
OP
HashSet1の要素数 = 6
HashSet2の要素数 = 2
HashSet2の要素一覧
EF
KL
set1はset2の上位集合か? True

合計8回Addを実行していますが、重複分の「AB」と「EF」が除外されるため、HashSet1の要素数は6となっています。また、set2の要素(EF・KL)がすべてset1に含まれているため、IsSupersetOfメソッドはTrueを返します。

まとめ

  • Countプロパティ:HashSetの要素数を取得するための基本の方法。内部的に個数を保持しているため、O(1)で高速に取得できます。
  • 重複の排除:HashSetは同一の要素を保持しないため、Countが返すのはユニークな要素の数です。
  • 関連メソッド:Overlaps(共通要素の有無)、Contains(特定要素の存在確認)、IsSupersetOf(上位集合の判定)など、集合操作に便利なメソッドが標準で用意されています。
  1. C#でHashSetと指定されたコレクションに共通の要素があるか確認する方法

    C#において、HashSetと指定されたコレクションとの間に共通の要素が存在するかどうかを確認したい場合は、Overlaps() メソッドを使用します。Overlaps() メソッドは、HashSetと引数で渡されたコレクションの間に共通する要素が1つでも存在すれば true を返し、まったく存在しなければ false を返します。このメソッドは System.Collections.Generic 名前空間に含まれており、引数として IEnumerable<T> 型のコレクションを受け取ります。例1:int型のHashSetの場合まずは、整数値を格納した2つのHashSetで共通

  2. JavaのHashSetクラスとは?使い方とサンプルコードを解説

    HashSetとはHashSetは、AbstractSetクラスを継承し、Setインターフェースを実装したコレクションクラスです。内部的にはハッシュテーブルを使用して要素を格納します。ハッシュテーブルは「ハッシュ化(hashing)」と呼ばれる仕組みによって情報を管理します。ハッシュ化では、キーの内容をもとに「ハッシュコード」と呼ばれる一意の値が算出されます。このハッシュコードがインデックスとして利用され、キーに関連付けられたデータがその位置に格納されます。キーからハッシュコードへの変換は自動的に行われるため、開発者が意識する必要はありません。HashSetの主な特徴重複した要素は格納できない