Pemrograman - Ulasan

Solusi untuk Kang Opik di Bandung

Aku dapat email dari sahabatku di Bandung:Mas aku ono problem….

TStringList.Sort kenapa gak bisa sorting data 1,2,3,4,10,11,12,11,11,13,15,1,5,9,8,7,7,6 padahal saya dah pake customsort di pass pake @customsortproc function
jadi ujian simulasi pemodelan aku gagal? 🙁
Thanks============================================================

Dear Kang Opik,

TStringList itu menghendaki string untuk setiap elemennya. Jadi custom sort harus mengintegerkan dulu nilai dalam elemennya agar bisa disorting secara numerik. Kalau sorted biasa, akan disort secara alphabetik, di mana 11 akan lebih duluan muncul dibanding 2 pada sorting ascending / menaik. Solusinya, ubah dulu nilai string menjadi integer seperti pada contoh berikut:

1. New Project
2. Double klik di form
3. Replace even FormCreate berikut menjadi:

procedure Tform1.FormCreate(Sender: TObject);

function CustomSort(list: TStringList; index1, index2: integer): integer;
begin
if (StrToIntDef(list[index1], 0) > StrToIntDef(list[index2], 0)) then
Result := 1
else if (StrToIntDef(list[index1], 0) < StrToIntDef(list[index2], 0)) then
Result := -1
else
Result := 0;
end;

var
a: TStringList;
begin
a := TStringList.Create;

a.Add(’10’);
a.Add(‘1’);
a.Add(‘5’);
a.Add(‘3’);
a.Add(’11’);
a.Add(‘2’);
a.Add(‘6’);

ShowMessage(‘Sebelum disort : ‘ + #13#10 + a.Text);

a.CustomSort(@CustomSort);

ShowMessage(‘Setelah disort : ‘ + #13#10 + a.Text);

a.Free;
end;

Demikian, semoga ada pencerahan.

Leave a Reply

Your email address will not be published. Required fields are marked *