본문 바로가기
delphi

문자열 목록에서 중복 제거를 위한 효과적인 방법

by doran365 2024. 8. 6.

중복 문자열 문제 해결의 중요성

문자열 목록을 다루는 프로그램에서 중복 문자열을 배제하고 관리하는 것은 매우 중요한 작업입니다. 특히 검색 색인어 추출이나 키워드 목록을 작성할 때, 중복 문자열을 제거함으로써 데이터의 정확성과 효율성을 높일 수 있습니다. 이를 위해 TStringList 객체를 이용한 효과적인 방법을 소개합니다.

TStringList 객체를 이용한 중복 문자열 제거

TStringList 객체란

TStringList 객체는 델파이에서 제공하는 클래스 중 하나로, 문자열을 효율적으로 관리하고 처리할 수 있는 기능을 제공합니다. TStringList는 정렬, 중복 제거, 문자열 추가 및 삭제 등의 다양한 기능을 내장하고 있어, 문자열 목록을 관리하는 데 매우 유용합니다.

중복 제거 함수 제작

중복 문자열을 제거하는 함수는 다음과 같은 절차를 따릅니다:

  1. TStringList 객체를 정렬합니다.
  2. 중복을 무시하는 속성을 설정한 새로운 TStringList 객체를 생성합니다.
  3. 원본 문자열 목록을 순회하며 중복을 제거한 문자열을 새로운 TStringList 객체에 추가합니다.
  4. 최종적으로 중복이 제거된 문자열 목록을 원본 TStringList 객체에 할당합니다.
procedure RemoveDuplicates(const stringList: TStringList);
var
  buffer: TStringList;
  cnt: Integer;
begin
  stringList.Sort;
  buffer := TStringList.Create;
  try
    buffer.Sorted := True;
    buffer.Duplicates := dupIgnore;
    buffer.BeginUpdate;
    for cnt := 0 to stringList.Count - 1 do
      buffer.Add(stringList[cnt]);
    buffer.EndUpdate;
    stringList.Assign(buffer);
  finally
    FreeAndNil(buffer);
  end;
end;

중복 제거 함수 사용 예제

아래의 예제는 무작위로 생성된 1000개의 숫자 문자열 목록에서 중복을 제거하는 방법을 보여줍니다:

var
  sl: TStringList;
  cnt: Integer;
begin
  Randomize;
  sl := TStringList.Create;
  try
    for cnt := 1 to 1000 do
      sl.Add(IntToStr(Random(2000)));

    ShowMessage('With duplicates: ' + #13#10 + IntToStr(sl.Count));

    RemoveDuplicates(sl);

    ShowMessage('Without duplicates: ' + #13#10 + IntToStr(sl.Count));
  finally
    sl.Free;
  end;
end;

중복 제거 함수의 효율성

이 함수는 TStringList의 정렬 기능과 중복을 무시하는 속성을 이용하여 중복 문자열을 효과적으로 제거합니다. 이로 인해 처리 속도가 빨라지고, 메모리 사용이 최적화됩니다.

TStringList 객체를 사용한 문자열 관리의 이점

간편한 문자열 추가 및 삭제

TStringList 객체를 사용하면 문자열을 쉽게 추가하고 삭제할 수 있습니다. 문자열을 추가할 때는 Add 메서드를, 삭제할 때는 Delete 메서드를 사용합니다.

문자열 정렬 및 검색

TStringList 객체는 Sort 메서드를 이용해 문자열을 알파벳 순서로 정렬할 수 있습니다. 또한 Find 메서드를 이용해 특정 문자열을 빠르게 검색할 수 있습니다.

메모리 관리

TStringList 객체는 메모리를 효율적으로 관리하며, Free 메서드를 이용해 객체를 해제함으로써 메모리 누수를 방지할 수 있습니다.

TStringList를 이용한 기타 활용 예시

문자열 파일 읽기 및 쓰기

TStringList 객체는 파일로부터 문자열을 읽어오거나 파일에 문자열을 저장하는 기능을 제공합니다. 이를 통해 텍스트 파일을 쉽게 다룰 수 있습니다.

var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile('example.txt');
    ShowMessage('File content: ' + #13#10 + sl.Text);
    sl.SaveToFile('output.txt');
  finally
    sl.Free;
  end;
end;

문자열 병합 및 분할

TStringList 객체를 이용하면 문자열을 특정 구분자로 분할하거나 병합할 수 있습니다. 이는 문자열을 여러 부분으로 나누거나 여러 문자열을 하나로 합치는 작업에 유용합니다.

var
  sl: TStringList;
  combinedStr: string;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := ',';
    sl.DelimitedText := 'apple,banana,orange';
    ShowMessage('First item: ' + sl[0]);

    combinedStr := sl.DelimitedText;
    ShowMessage('Combined string: ' + combinedStr);
  finally
    sl.Free;
  end;
end;

결론

TStringList 객체를 이용한 문자열 목록 관리 및 중복 제거 방법은 프로그램의 효율성을 크게 향상시킬 수 있는 강력한 도구입니다. 중복 문자열 문제를 효과적으로 해결함으로써 데이터의 정확성을 유지하고, 다양한 문자열 처리를 간편하게 수행할 수 있습니다. 이와 같은 방법을 통해 문자열 목록을 체계적으로 관리하여 프로그램의 성능을 최적화해 보세요.