C#에서 HashSet으로 문자열의 중복 문자 제거하기
C#에서는 HashSet을 활용하면 문자열에 포함된 중복 문자를 아주 간단하게 제거할 수 있습니다. HashSet은 중복 요소를 허용하지 않는 컬렉션이기 때문에, 문자열의 각 문자를 HashSet에 담기만 하면 자동으로 고유한 문자만 남게 됩니다.
먼저 예제에 사용할 문자열은 다음과 같습니다.
string myStr = "kkllmmnnoo";
이제 이 문자열을 char 타입의 HashSet으로 매핑합니다. 이 과정에서 중복된 문자들은 자동으로 걸러지며, 각 문자는 한 번씩만 저장됩니다.
var unique = new HashSet<char>(myStr);
HashSet의 생성자에 문자열을 그대로 전달하면 내부적으로 문자열이 char 시퀀스로 처리되므로, 별도의 반복문 없이도 중복 제거가 완료됩니다.
전체 예제 코드는 다음과 같습니다.
예제
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
실행 결과를 보면 원본 문자열 "kkllmmnnoo"에서 중복이 모두 제거되어 "klmno"라는 새로운 문자열이 출력된 것을 확인할 수 있습니다. 참고로 HashSet은 공식적으로 요소의 순서를 보장하지 않지만, 위 예제처럼 실제 출력에서는 대개 문자가 처음 등장한 순서대로 유지되는 것을 볼 수 있습니다. 만약 순서 보장이 중요한 로직이라면 LINQ의 Distinct() 메서드를 함께 고려해 보는 것도 좋은 방법입니다.