C#で文字列から重複文字を削除する方法:HashSetの活用例
C#で文字列から重複した文字を取り除きたい場合、HashSet<char> を使うのが最もシンプルで効率的な方法の一つです。HashSetは重複する要素を自動的に排除して格納するコレクションのため、文字列をそのまま渡すだけで一意な文字だけを抽出できます。
HashSetによる重複削除の基本
まず、処理対象となる文字列を用意します。以下は同じ文字が連続して含まれるサンプル文字列です。
string myStr = "kkllmmnnoo";
次に、この文字列をそのまま HashSet<char> のコンストラクタに渡します。HashSetは各文字を1つずつ登録し、すでに存在する文字は無視するため、結果として重複のない文字のコレクションが得られます。
var unique = new HashSet<char>(myStr);
完全なコード例
using System;
using System.Linq;
using System.Collections.Generic;
namespace Demo {
class Program {
static void Main(string[] args) {
string myStr = "kkllmmnnoo";
Console.WriteLine("Initial String: " + myStr);
var unique = new HashSet<char>(myStr);
Console.Write("New String after removing duplicates: ");
foreach (char c in unique)
Console.Write(c);
}
}
}
実行結果
Initial String: kkllmmnnoo New String after removing duplicates: klmno
コードの解説
このプログラムのポイントは以下の通りです。
- new HashSet<char>(myStr):文字列は IEnumerable<char> として扱えるため、コンストラクタに直接渡せます。HashSetは内部でハッシュテーブルを使用しており、重複する要素の追加を自動的に防ぎます。
- foreachループ:HashSetに格納された一意な文字を1文字ずつ取り出し、画面に出力しています。
- 順序に関する注意点:HashSetは要素の挿入順序を保証しません。元の文字列の出現順序を維持したい場合は、後述のLINQの Distinct() メソッドを使うのがおすすめです。
代替手段:LINQのDistinct()メソッド
LINQ(System.Linq)を使えば、より簡潔に記述することも可能です。
string result = new string(myStr.Distinct().ToArray());
このように、C#ではHashSetやLINQを活用することで、わずか数行のコードで文字列から重複文字を効率的に除去できます。用途に応じて、順序を保持したい場合は Distinct()、パフォーマンスと集合操作を重視する場合は HashSet を選ぶとよいでしょう。
-
Pythonで文字列から数字以外の文字を削除する方法を解説
Pythonでは、文字列から数字以外の文字(アルファベットや記号など)を取り除く方法がいくつかあります。ここでは、代表的な3つの手法を具体的なコード例とともに紹介します。 1. 内包表記とisdigit()メソッドを使う方法 最もシンプルでPythonらしい書き方は、for ... ifによる内包表記を使って数字以外の文字を除外する方法です。isdigit()メソッドは、文字が数字かどうかを判定してくれます。 >>> s = H3ll0 P30P13 >>> .join(i for i in s if i.isdigit()) 303013 このコードでは
-
Pythonで文字列から特定の文字を削除する方法【replace・正規表現・translate】
replace()メソッドで文字を削除する基本の方法Pythonの文字列(str型)には、部分文字列を別の文字列へ置き換えるためのreplace()メソッドが用意されています。削除したい文字を空文字列()に置き換えることで、その文字を取り除くことができます。>>> Hello people.replace(e, ) Hllo popl正規表現(re.sub)で複数の文字を一度に削除する1行のコードで複数種類の文字をまとめて削除したい場合は、正規表現モジュール re を使うのがおすすめです。削除したい文字を「|」(OR条件)で区切って指定し、re.sub(置換対象パターン, 置