.NET開発者のためのブログメディア

C#のHashSetクラスで要素を重複なく操作する方法
C#でプログラミングを行う場合には、「Hashset」というコレクションクラスを使用することができます。これは要素の重複を許可しない集合構造を表します。数学の集合にもよく似た構造です。
- PG
- 要素の重複を許可しないということは、大量のデータを扱うときに役立ちそうですね。
- PL
- そうなんです。また、Hashsetは要素の順序を変えずにそのまま出力してくれるので、並び替えたくないようなデータを扱うときにすごく便利なんですよ。
目次
HashSetクラスの概要と使い方
HashsetはC#において、何らかの要素(オブジェクト)の重複を省いて一覧として保持したい時に使う、要素の重複を許さないコレクションクラスです。例えば”A,B,C,A”と要素が並んでいます。このまま実行すれば結果は”A,B,C,A”と、そのまま出力されます。しかし、Hashsetクラスを使用して実行すると結果は”A,B,C,”となり、重複した”A”という要素を省いて処理してくれます。以下ではHashsetとAddメソッド、Tolistメソッドを使用した使用例を紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; using System.Linq; namespace TestProgram { class HashsetTest { static void Main( string[] args ) { var set1 = new HashSet<string>(); set1.Add("Blue"); set1.Add("Red"); set1.Add("Yellow"); set1.Add("Red"); set1.Add("Green"); var list = set1.ToList(); foreach(var s1 in list) Console.WriteLine("{0}",s1); } } } |
1 2 3 4 |
Blue Red Yellow Green |
new HashSet();でHashSetを作り、それに要素をAddメソッドで”Blue,Red,Yellow,Red,Green”の順番で追加します。
ToListメソッドにより、それらの要素のリストを作成し出力すると結果は”Blue,Red,Yellow,Green”となります。
Hashsetの特徴
なぜ要素の配列をバラバラにしたかというとHashsetでは要素の序列(ソート)が保証されないからです。Hashsetの他にも重複する要素を省いてくれるクラスはありますが、ソート処理にも少しとはいえ時間がかかります。要素をソートする必要性がない場合は、Hashsetを有効に活用しましょう。
- PG
- 要素の順序を変えないまま出力してくれるとは、処理が速くなるポイントだったんですね。
- PL
- 特に大量のデータを扱うときは、必要に応じてクラスを使い分けることもとても大事になります。
活用方法が豊富なHashsetクラス
今回はHashsetクラスで新しい要素を追加するときAddメソッドを使用しました。HashsetクラスのAddメソッドは便利になっており、すでに要素が存在していた場合には”false”を返して、要素が追加できた場合には”true”を返すことができます。また、Hashsetオブジェクトの和集合や差集合、積集合といった集合演算を行うメソッドも用意されています。大量のデータを扱うのに重複は付き物です。Hashsetクラスを有効に活用しましょう。