İç içe Array..

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

İç içe Array..

Mesaj gönderen RADCoder »

Merhaba arkadaşlar.

Öncelikle sorumu yazmadan Array konusunda çok basit şeyler bildiyimi belirtmek isterim.
Şu aralar Dizileri çok fazla kullanacağım için biraz bilgi almak istiyorum.
Fakat bu gibi meselelerin başka yöntemlerce çözülmesi mümkün ise tabiki bu fikrede açığım.

Şimdi yapmaya çalıştığım şey için kafamda bir çizgi kuramadım, ama basit olarak:

Kod: Tümünü seç

 Array of string 
ve ya

Kod: Tümünü seç

 type TStringList; 
Tek lsite gibi bir Array oluştura biliriz, peki iç içe bir Array oluşturmak istersek bunu nasıl yapmalıyız?

Küçük bir detay gerekirse şöyle anlata bilirim.
Arabaları ele alarsak:
  • > Marka
    > Model
    > Renk
3 kısımlı iç içe bir dizi nasıl oluşturula bilir ve Marka seçildiyinde o marakya dair bilgileri nasıl elde ede biliriz?

Hepinize önceden teşekkür ederim..
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: İç içe Array..

Mesaj gönderen mkysoft »

Kod: Tümünü seç

Array of Array of Array of string 
kullanarak isteğinizi kolayca elde edebilirsiniz. Ancak bu yöntemde kırmızı arabaları bulmak sıkıntı olacaktır. Bu nedenle OOP temelli gitmeniz ileride işinizi kolaylaştırır. Tabi array'ın performansı her zaman daha iyidir, OOP'nin ise kod okunabilirlirliği ve değişiklik yapılması daha kolaydır. Şöyle örnek vereyim, bu üç özelliğe ek olarak birde sınıf bilgisi eklerseniz, yazmış olduğunuz kodların %90'ını elden geçirmek zorunda kalırsınız. OOP'de bu daha kolay olur. Örnek olması için TList kullanımına bakınız.
http://www.delphibasics.co.uk/RTL.asp?Name=TList
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: İç içe Array..

Mesaj gönderen RADCoder »

Cevabınız için teşekkür ederim, ama sanırım eksik anlatımım bir kaç şeyi atlatdı. Kafamı karıştıran bir mesele var.

Şimdi diyelim ki Mercedess Markası altında C200 ve siyah renk olarak bir bilgi eklediyimizde, Ardından Aynı kateqori içinde C220 Beyaz sonra yeniden C230 gibi devam etmek istersek nasıl olacak? Buradaki maksat Bir bilgi üzerine bir den fazla alt elaman eklemek..
Verdiğiniz örneğe benzer bir Record Type olarak başka bir örnek yazmıştım:

Kod: Tümünü seç

  type
    TIPData  =  record
    Model   : string;
    Renk   : string;
    end;
    

  TForm1 = class(TForm)
   ......
  private
    { Private declarations }
     IPList: TDictionary<string, TIPData>;
  public
    { Public declarations }
  end;

Kod: Tümünü seç

var
   IPData: TIPData;
begin
   IPData.Model   := txtModel.Text;
   IPData.Renk    := txtRenk.Text;
   IPList.Add(txtMarka.Text , IPData);
Şu kısımda ki sorun:

Kod: Tümünü seç

IPList.Add(txtMarka.Text , IPData);
Aynı Marka altına birden fazla model ve renk yazamıyorum.

Veri tabanı kullanınca çok basit bir sorgulama işlemi yapıldığında elde edile bilir. Fakat her küçük işlemler için veri tabanı kullanmak yalnış Ama belkide SQLİTE kullanıla bilir.

Fikri olan varsa bu konu ile ilgili yardımlarını bekliyorum.
Teşekkürler.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: İç içe Array..

Mesaj gönderen freeman35 »

Öncelikle ilk mesajında kullandığın "iç içe dizi" kavramını aklından çıkart. programcılıkta böyle bir kavram yoktur. Onun gerçek tanımı "çok boyutlu dizi" dir. Bu kavramları doğru şekilde kullanmak, anlaşmaları kolaylaştıracaktır.
Ver tabanı eğer bilgiler son kullanıcı tarafından girilecek ve bunlar saklanacaksa kullanılmak zorunda.
Bir kayıt bloğun mevcut, Bunu hafızada oluşturmak için "bence" en basit çözüm mkysoft'un belirttiği TList ile yapmak.

Kod: Tümünü seç

  type
    TIPData  =  record
    Model   : string;
    Renk   : string;
    end;
Var Lst: TList;
     Tmp_Record:TIPData;
  I: Integer; 
...
New(Tmp_Record);
Tmp_Record.Model := .....
.....
I := Lst.Add(Tmp_Record);
........
Tmp_Record := Lst.Items[I];
Dispose(Tmp_Record);
Lst.Delete(I);
gibi bir mantık kullanabilirsin.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: İç içe Array..

Mesaj gönderen mkysoft »

Bu şekilde yapmak istiyorsanız her bir özelliği (marka, model, renk) liste olarak yaratabilirsiniz.

Kod: Tümünü seç

type
  TModel= class
    Adi: string;
    Renkler: TStringList;
  end;
  TAraba= class
    Adi: string;
    Modeller: TList
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Arabalar: Tlist;
  Araba: TAraba;
  Model: TModel;
begin
  Arabalar := TList.Create;
  Araba := TAraba.Create;
  Araba.Adi := 'Mercedes';
  Araba.Modeller := TList.Create;
  Model := TModel.Create;
  Model.Adi := 'SLK';
  Model.Renkler := TStringList.Create;
  Model.Renkler.Add('Beyaz');
  Araba.Modeller.Add(Model);
  Arabalar.Add(Araba)

end;
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: İç içe Array..

Mesaj gönderen RADCoder »

Cevaplarınız için teşekkür ederim.
Sorunu daha kolay olması acısından JSON ile çözmeye çalıştım.

Tekrar teşekkür ederim Arkadaşlar..
Cevapla