변수에 값이 들어있습니다.변수에 들어 있는 값들을 1,2,3,4,7 값만 가져 오려 합니다.
변수에 들어가있는 숫자는 정렬되어 있지 않은것이며, 중복되는 숫자는 한번만 나오게끔 하려 합니다.
어찌해야 가장 효율적일까요?
var
str1,str2,str,aa : string;
i,j:integer;
List1 : TStringList;
temp : Array[0..10] of String;
---------------------------------------------------------
str1:='1,2,3';
str2:='1,2,4,7';
str:=str1+','+str2;
List1 := TStringList.Create;
TRY
List1.CommaText := str;
str := ' ';
FOR i := 0 to List1.Count -1 do begin
for j := 0 to list1.Count -1 do begin
if temp[j] = list1[i] then aa := 'Y';
end;
if aa = 'Y' then begin
aa := '';
Continue;
end;
str := str + list1[i]+ ',';
temp[i] := list1[i];
end;
edit1.Text := str;
FINALLY
List1.Free;
END;
요런 식으로 처리하면 나오기는 하는데... 넘 지저분 한거 같아서요...
달리 깔끔하게 처리할수 있는 방법좀 부탁드리겠습니다.
한번 해봤습니다. 조금 덜 지저분해졌나 몰겠네여.
stringlist에 중복제거하는 메소드가 있습니다. 아래 참조하세요
그럼 즐프하세요....
var
I: Integer;
List, List2:TStringList;
str1,str2,str : STring;
begin
str1 := '1,2,3';
str2 := '1,2,4,7';
str := str1 + ',' + str2;
List := TStringList.Create;
List2 := TStringList.Create;
List.CommaText := str;
//이후에 추가되는 문자열중 중복되는 문자열은 제외된다.
List2.Sorted := true;
List2.Duplicates:= dupIgnore;
for I := 0 to List.Count - 1 do // Iterate
begin
List2.Add(List.Strings[I]);
end; // for
showmessage(List2.DelimitedText);
List.Free;
List2.Free;
end;