TStringList에 저장된 문자열에서 동일한 문자열 개수 세기
절름발이 프로그래머/Delphi / 2009. 7. 13. 02:15
ipAddresses 라는 TStringList에 IP 주소 문자열이 있다고 가정할 때,
동일한 IP주소가 몇 개나 있는지 찾고, 그 결과를 출력하는 예제입니다.
꼭 IP 주소가 아닌, 일반 문자열이나 단어등에도 적용해 볼 수 있습니다.
AddObject로 문자열의 개수를 추가하는 방식이라서, 간단하게 결과를 볼 수 있습니다.
아래 펌글에 좀 더 빠른 방법이 제안되어 있습니다만, 대용량이 아니라면 이것만 가지고도 충분히 빠른 결과를 볼 수 있습니다.
procedure TForm1.Button1Click(Sender: TObject);
var
ls : TStringList;
ip : string;
ipAddresses : TStringList;
n : integer;
I: Integer;
begin
memo1.Lines.Clear;
memo2.Lines.Clear;
ipAddresses := TStringList.Create;
ipAddresses.Add('192.168.10.1');
ipAddresses.Add('192.168.1.10');
ipAddresses.Add('192.168.1.1');
ipAddresses.Add('192.168.10.1');
ipAddresses.Add('192.168.1.1');
ipAddresses.Add('192.168.1.10');
ipAddresses.Add('192.168.1.1');
ipAddresses.Add('192.168.1.10');
ls := TStringList.Create;
ls.Sorted := true;
for ip in ipAddresses do begin
n := ls.IndexOf(ip);
if n = -1 then
ls.AddObject(ip, TObject(1))
else
ls.Objects[n] := TObject(Integer(ls.Objects[n]) + 1);
end;
memo1.Lines := ls;
for I := 0 to ls.Count - 1 do
begin
memo2.Lines.Add(IntToStr(Integer(ls.Objects[I])));
end;
end;