Dictionary<TKey, TValue>のキーだけのようなコレクションです。重複チェックに重宝しそうですので試してみます。
ファイル名:HashSetSample01.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
ファイル名:Program.cs
using System.Collections.Generic;
public class Program
{
static void Main()
{
// HashSetを生成
// Windowsのパス用なので大文字小文字を区別しない。StringComparer.OrdinalIgnoreCase
var pathList = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
// 既存でない場合、要素を登録する。
var path1 = "hoo/bar/sample.txt";
if (!pathList.Contains(path1))
{
pathList.Add(path1);
}
var path2 = "hoo/bar/sample2.txt";
if (!pathList.Contains(path2))
{
pathList.Add(path2);
}
var path3 = "hoo/bar/SAMPLE2.txt";
if (!pathList.Contains(path3))
{
// sample2.txtがすでに登録済みなので実行されない
pathList.Add(path3);
}
// 要素をすべて取得する。
foreach (var path in pathList)
{
Console.WriteLine($"{path}");
// hoo/bar/sampl.txt
// hoo/bar/sampl2.txt
}
// 要素を削除する。
pathList.Remove(path1);
// 要素数を取得する。
Console.WriteLine($"pathList.Count:{pathList.Count}");
// pathList.Count:1
// 要素をすべてクリアする。
pathList.Clear();
// 要素数を取得する。
Console.WriteLine($"pathList.Count:{pathList.Count}");
// pathList.Count:0
}
}
インデックスを持つわけではないので、要素を取得する場合は個別にアクセスする可能性は低く、foreach
でコレクションを全部アクセスすることになると思います。
コメント