C#のHashSetの使い方のサンプルです。(確認環境:Microsoft Visual Studio Community 2017)
目次
仕組み | HashSetクラス |
初期値 | 要素に初期値をセットする |
取得する | 要素をすべて取得する(For Each文) |
指定の要素があるかを返す (Containsメソッド) | |
要素数を取得する (Countプロパティ) | |
追加する | 要素を追加する (Addメソッド) |
削除する | 要素を指定して要素を削除する (Removeメソッド) |
すべての要素を削除する (Clearメソッド) |
HashSetクラス
var a = new HashSet<string>(); |
上記はHashSetクラスをインスタンス化して変数aに代入しています。
この変数aは複数の値を持てるようになります。
<>はジェネリクスです。
varキーワードを使用していて型推論が行われます。
変数aの各値のデータ型はstringになります。
HashSetの変数の図
- 重複したオブジェクトは追加できません。
- 順序はありません。
- 以下はMicrosoftのC#のHashSetクラスのリンクです。
https://msdn.microsoft.com/ja-jp/library/bb359438(v=vs.110).aspx
要素に初期値をセットする
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var colors = new HashSet<string>() { "赤", "黄", "青" };
foreach (var a in colors)
{
Console.WriteLine(a);// 赤 黄 青と出力される
}
}
}
8行目は、HashSetクラスをインスタンス化し、かつ初期値をセットしています。
10~13行目は、For Each文で値を取得しています。
要素をすべて取得する(For Each文)
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var colors = new HashSet<string>();
colors.Add("赤");
colors.Add("黄");
colors.Add("青");
foreach (var a in colors)
{
Console.WriteLine(a);// 赤 黄 青
}
}
}
13行目は、for文ですべての要素を取得しています。
指定の要素があるかを返す (Containsメソッド)
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var colors = new HashSet<string>();
colors.Add("赤");
colors.Add("黄");
colors.Add("青");
Console.WriteLine(colors.Contains("青"));// True
}
}
14行目は、Containsメソッドで指定の要素があるかを取得しています。
ある場合trueです。
要素数を取得する (Countプロパティ)
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var colors = new HashSet<string>();
colors.Add("赤");
colors.Add("黄");
colors.Add("青");
Console.WriteLine(colors.Count);// 3
}
}
14行目は、Countプロパティで要素数を取得しています。
要素を追加する (Addメソッド)
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
//HashSet<string> colors = new HashSet<string>();
var colors = new HashSet<string>();
colors.Add("赤");
colors.Add("黄");
colors.Add("青");
colors.Add("赤");
foreach (var a in colors)
{
Console.WriteLine(a);// 赤 黄 青
}
}
}
9行目は、HashSetクラスをインスタンス化しています。
代入する変数はvarで宣言できます。8行目のようにデータの型でも可能です。
11~13行目は、Addメソッドで値を追加しています。
15行目もAddメソッドで値を追加していますが、重複した値のため追加できません。
17~20行目は、foreach文で値を取得しています。
要素を指定して要素を削除する (Removeメソッド)
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var colors = new HashSet<string>();
colors.Add("赤");
colors.Add("黄");
colors.Add("青");
colors.Remove("黄");
foreach (var a in colors)
{
Console.WriteLine(a);// 赤 青
}
}
}
14行目は、Removeメソッドで値を指定して削除しています。
すべての要素を削除する (Clearメソッド)
using System;
using System.Collections.Generic;
class Test1
{
static void Main()
{
var colors = new HashSet<string>();
colors.Add("赤");
colors.Add("黄");
colors.Add("青");
colors.Clear();
Console.WriteLine(colors.Count);// 0
}
}
14行目は、Clearメソッドですべての要素を削除しています。
関連の記事