Dizi içerisinde dizi tutmak ve kullanmak ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Code_Monster
Üye
Mesajlar: 16
Kayıt: 09 Tem 2010 10:36

Dizi içerisinde dizi tutmak ve kullanmak ?

Mesaj gönderen Code_Monster »

Merhabalar

Arkadaşlar Bir dizi düşünün içerisinde her türden diziyi saklasın örneğin.

Kod: Tümünü seç

var
a:array of string;
b:array of integer;
c:array of char;

procedure bir_diziye _bagli olarak_sirala(işte burada ne tür bir dizi tanımı yapmalıyım ki bu procedurenin kullanılış şekli aşağıdaki gibi olabilsin? );

// kullanımı
bir_diziye _bagli olarak_sirala([a,b,c]);  veya bir_diziye _bagli olarak_sirala([@a,@b,@c]);
yapmak istediğim procedurede şu:
integer tipinde olan dizimi sıralarken aynı zamanda diğer dizlerimide sıralamak ama hepsi kendi içinde sıralanmıyacak.
diyelimki integer dizimin en büyük elemanı [3]. ise bunu en başa taşırken diğer dizilerimin [3]. elemanlarınıda başa taşıyacağım.

listview deki gibi düşünün nasıl bir alanı sıraladığınızda diğerleride ona bağlı olarak değişiyorsa bende öyle yapan bir procedure yazmaya çalışıyorum.

fikri olan arkadaşlar paylaşırlarsa sevinirim.

benim aklıma variant tipi geldi denedim kullanmayıda şöyleki:

Kod: Tümünü seç

type
dizilerim    =array of variant;
Pdizilerim  =^dizilerim;

procedure bir_diziye _bagli olarak_sirala(diziler:array of Pdizilerim)
//kullanım

//bu şekilde yaparsam eğer kullanmak istediğim zaman tanımlayacağım diğer dizilerin de variant tipi olması gerekiyor.
a:array of variant;
b:array of variant;
c:array of variant;

bu benim için bir sorun  böyle olmasını istemiyorum ne yapabilirim?.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Dizi içerisinde dizi tutmak ve kullanmak ?

Mesaj gönderen mkysoft »

record tipini kullanmanızı tavsiye ederim.

Kod: Tümünü seç

Record satır;
A: integer;
B: string;
End;
Tablo:array of satir;
Setlength(tablo,5); 
Tablo[0].a:=1;
Procedure sirala(var tt:tablo);
Begin;
End;
Kodları aklımdan yazdım, yazım hataları olabilir.
Code_Monster
Üye
Mesajlar: 16
Kayıt: 09 Tem 2010 10:36

Re: Dizi içerisinde dizi tutmak ve kullanmak ?

Mesaj gönderen Code_Monster »

Şöyle bir çözüme gittim işimi gördü:

Kod: Tümünü seç

uses
  SysUtils,Math;

Type
  Siralanacak     =array of Double;   TDizi_Integer   =array of Integer;
  PSiralanacak    =^Siralanacak;      PTDizi_Integer  =^TDizi_Integer;

  TDizi_string    =array of string;   TDizi_Variant   =array of Variant;
  PTDizi_string   =^TDizi_string;     PTDizi_Variant  =^TDizi_Variant;


procedure Bagli_Dizi_Sirala(Siralanan:PSiralanacak;
                            DizilerInteger:array of PTDizi_Integer;
                            DizilerString :array of PTDizi_string;
                            DizilerVariant:array of PTDizi_Variant);

implementation

procedure Bagli_Dizi_Sirala(Siralanan:PSiralanacak;
                            DizilerInteger:array of PTDizi_Integer;
                            DizilerString :array of PTDizi_string;
                            DizilerVariant:array of PTDizi_Variant);
//Dizilerin eleman sayılarının birbirine eşit olup olmadığı kontrolu yapılacak
var
  i,j,P        :Integer;

  tempDouble  :Double;
  tempInt     :Integer;
  tempStr     :string;
  tempVar     :Variant;
begin

  for i := 0 to High(Siralanan^) - 1 do
  begin
    for j := i+1 to High(Siralanan^) do
    begin
      if comparevalue(Siralanan^[i],Siralanan^[j]) = -1 then
      begin
        tempDouble :=Siralanan^[j];
        Siralanan^[j] :=Siralanan^[i];
        Siralanan^[i] :=tempDouble;
        //----------------

          if DizilerInteger[0] <>nil then
            for P := 0 to high(DizilerInteger) do
            begin
              tempInt :=DizilerInteger[P]^[j];
              DizilerInteger[P]^[j] :=DizilerInteger[P]^[i];
              DizilerInteger[P]^[i] :=tempInt;
            end;
          if DizilerString[0] <>nil then
            for P := 0 to high(DizilerString) do
            begin
              tempStr :=DizilerString[P]^[j];
              DizilerString[P]^[j] :=DizilerString[P]^[i];
              DizilerString[P]^[i] :=tempStr;
            end;
          if DizilerVariant[0] <>nil then
            for P := 0 to high(DizilerVariant) do
            begin
              tempVar :=DizilerVariant[P]^[j];
              DizilerVariant[P]^[j] :=DizilerVariant[P]^[i];
              DizilerVariant[P]^[i] :=tempVar;
            end;

      end;
    end;
  end;

end;
record tipini de başka bir prosedürüme çok güzel uyarladım hatırlattığınız için teşekkür ederim. bu procedure için böyle bir çözüm ürettim güzel işe yarıyor :)
Cevapla