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.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s