özel sıralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

özel sıralama

Mesaj gönderen sr1111 »

s.a
en hzili sekilde stringlist veya memodaki alt alta yazilmis kelimleri özel olarak siralamak istiyorum
sirasiyla s,b,n,a,f,g,u,e gibi sectigim harflere gore siralasin istiyorum

serkan
burak
nesrin
ali

gibi nasil yaparim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: özel sıralama

Mesaj gönderen sabanakman »

Merhaba, örnekteki gibi kendi kıyaslama fonksiyonunuzu yazarak hızlı bir sıralama işlemini TStringList sınıfı ile yapabilirsiniz.

Kod: Tümünü seç

function Kiyasla(List: TStringList; Index1, Index2: Integer): Integer;
begin
  if List[Index1]>List[Index2] then Result:=1
  else if List[Index1]<List[Index2] then Result:=-1
  else Result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Liste:TStringList;
begin
  Liste:=TStringList.Create;
  try
    Liste.Assign(Memo1.Lines);
    Liste.CustomSort(Kiyasla);
    Memo1.Lines:=Liste;
  finally
    Liste.Free;
  end;
end;
Burada önemli olan Kiyasla fonksiyonunda Index1'inci sıradaki eleman, Index2'nci sıraya göre, sıralamada üstte kalacaksa -1, alta kalacaksa +1 değerini almasıdır. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: özel sıralama

Mesaj gönderen sr1111 »

tesekkur ederim.
fakat belirledigim 28 harf sirasini c, d, y, a, e, f,...... harf sirasini nereye nasil yazacagim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: özel sıralama

Mesaj gönderen sabanakman »

Kıyasla fonksiyonu içerisinde bunu kodlaman gerekiyordu. Şimdiki örnek, biraz hazır olacak ama umarım fikir verecektir.

Kod: Tümünü seç

function Kiyasla(List: TStringList; Index1, Index2: Integer): Integer;
const HarfDizisi:String='cdyaef.....';
var i1,i2,n1,n2,i,n:Integer; S1,S2:String; Devam:Boolean;
begin
  Result:=0;
  S1:=List[Index1];n1:=Length(S1);
  S2:=List[Index2];n2:=Length(S2);
  n:=n1;
  if n1>n2 then begin
    Result:=1;
    n:=n2;
  end else if n1<n2 then Result:=-1;
  i:=1; Devam:=True;
  while (i<=n) and Devam do begin
    i1:=Pos(S1[i],HarfDizisi);
    i2:=Pos(S2[i],HarfDizisi);
    if i1>i2 then begin
      Result:=1;
      Devam:=False;
    end else if i1<i2 then begin
      Result:=-1;
      Devam:=False;
    end;
    Inc(i);// --> i:=i+1;
  end;
end;
Burada önemli olan const HarfDizisi:String='cdyaef.....'; satırında doğru sıralamadaki değeri vermendir. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: özel sıralama

Mesaj gönderen sr1111 »

cok tesekkur ederim sayin sabanakman. ellerin dert gormesin.
bir sorunum daha olmustu alttaki topice yazmistim onada bir care bulabilirmiyiz, son mesajimdaki

viewtopic.php?f=2&t=26224
Cevapla