C# 入門

ホーム > コレクション > セットの利用方法 (HashSet と SortedHash)

セットの利用方法 (HashSet と SortedHash)

スポンサーリンク

例えば、A、B、C、D、A、B という列に出てきたアルファベットを調べることを考えましょう。

この中で A と B は二回ずつ出現していますが、C と D は一回ずつで、結局 A、B、C、D が出現しています。

このように「項目の有無」だけを調べるような場合のプログラミングはどうしたらよいでしょうか。

こういう場合は、セットと呼ばれるデータ構造を用います。

ちなみに、セットといってもオブジェクト指向プログラミングで、特定のデータフィールドに値を設定するときのメソッドである、 いわゆるアクセサメソッドのセッターやゲッターのセットではありません。

ここでいうセット (Set) は数学の「集合」の意味です。

実装方法は他のアルゴリズムの教科書に譲るとして、ここでは .NET Framework で利用できる "セット" を紹介します。

現在 .NET Framework で利用できるのは HashSet と SortedHash です。

HashSet ではセット内の要素の序列が保障されていません。一方、SortedHash では並び替え (ソート) が行われます。

具体的な利用方法は次の通りです。

HashSet では次のようになります。

using System;
using System.Collections.Generic;
using System.Linq;

namespace collection1 {
	class Program {
		static void Main( string[] args ) {
			var set1 = new HashSet<string>();
			set1.Add( "b" );
			set1.Add( "a" );
			set1.Add( "c" );
			set1.Add( "a" );
			set1.Add( "x" );
			var lst = set1.ToList();
			foreach( var s in lst ) {
				Console.WriteLine( "{0}", s );
			}
		}
	}
}

HashSet を作りそれに要素を "b", "a", "c", "a", "x" の順で追加します。

ToList メソッドで要素のリストを作りそれを出力した結果は次のようになります。

b
a
c
x

a を二回追加 (Add メソッドを二回呼び出し) しているのに、リストには一度しか出現していません。

一方、SortedSet を利用した場合は次のようになります。

使い方 (インターフェイス) は全く同様に利用できますが・・・

			...
			var set1 = new SortedSet<string>();
			set1.Add( "b" );
			set1.Add( "a" );
			...

リストにして出力した結果は次の通り、ソートされています。

a
b
c
x

要素をソートする必要性がない場合は HashSet を利用、ソートしていたほうが都合が良い場合は SortedSet を利用すれば OK です。

スポンサーリンク
ホーム > コレクション > セットの利用方法 (HashSet と SortedHash)