Delphi'de Karma Tablolar için TDictionary kullanma

click fraud protection

Delphi 2009'da tanıtılan TDictionary sınıfı, Generics'te tanımlanmıştır. Koleksiyonlar birimi, anahtar / değer çiftlerinin genel bir karma tablo türü koleksiyonunu temsil eder.

Genel tipler, ayrıca Delphi 2009'da tanıtıldı, özellikle veri üyelerinin türünü tanımlamayan sınıfları tanımlamanızı sağlar.

Sözlük bir bakıma diziye benzer. Bir dizi herhangi bir değer olabilen bir tamsayı değeriyle dizinlenmiş bir dizi değerle (koleksiyon) çalışırsınız. sıra türü değeri. Bu indeksin bir alt ve bir üst sınırı vardır.

Sözlükte, anahtarların ve değerlerin herhangi bir türde olabileceği yerlerde saklayabilirsiniz.

TDictionary Yapıcı

Bu nedenle TDictionary yapıcısının beyanı:

Delphi'de TDictionary bir karma tablosu olarak tanımlanır. Karma tablolar, anahtarın karma koduna göre düzenlenmiş bir anahtar ve değer çiftleri koleksiyonunu temsil eder. Karma tablolar aramalar için optimize edilmiştir (hız). Bir karma-değer çifti bir karma tablosuna eklendiğinde, anahtarın karma değeri eklenen çiftle birlikte hesaplanır ve saklanır.

instagram viewer

TKey ve TValue, jenerik oldukları için herhangi bir tipte olabilirler. Örneğin, sözlükte saklayacağınız bilgiler bir veritabanından geliyorsa, Anahtarınız bir GUID olabilir (veya benzersiz dizini gösteren başka bir değer) değeri, değer veritabanınızdaki bir veri satırıyla eşlenen bir nesne olabilir tablolar.

TDictionary kullanma

Basitlik amacıyla, aşağıdaki örnekte TKeys için tamsayılar ve TValues ​​için karakterler kullanılmıştır.

İlk olarak, TKey ve TValue türlerinin ne olacağını belirterek sözlüğümüzü beyan ederiz:

Ardından sözlük Add yöntemi kullanılarak doldurulur. Bir sözlük aynı Anahtar değerine sahip iki çift içeremediğinden, anahtar değerli bir çiftin sözlüğün içinde olup olmadığını kontrol etmek için ContainsKey yöntemini kullanabilirsiniz.

Bir çifti sözlükten kaldırmak için Kaldır yöntemini kullanın. Belirtilen bir anahtar içeren bir çift sözlüğün bir parçası değilse bu yöntem sorun yaratmaz.

Anahtarlar arasında döngü yaparak tüm çiftleri geçmek için bir döngü için.

Sözlüğe bazı anahtar / değer çiftlerinin dahil edilip edilmediğini kontrol etmek için TryGetValue yöntemini kullanın.

Sözlüğü Sıralama

Sözlük karma tablo olduğundan, öğeleri tanımlı bir sıralama düzeninde depolamaz. İhtiyaçlarınızı karşılayacak şekilde sıralanan anahtarları yinelemek için, sıralamayı destekleyen genel bir toplama türü olan TList'ten yararlanın.

Yukarıdaki kod, artan ve azalan tuşları sıralar ve değerleri sözlükte sıralanmış düzende depolanmış gibi tutar. Tamsayı tipi Anahtar değerlerinin azalan sıralaması TComparer ve anonim bir yöntem kullanır.

Anahtarlar ve Değerler TObject Tipinde Olduğunda

Yukarıda listelenen örnek basittir, çünkü hem anahtar hem de değer basit türlerdir. Hem anahtarın hem de değerin kayıtlar veya nesneler gibi "karmaşık" türler olduğu karmaşık sözlükleriniz olabilir.

İşte başka bir örnek:

Burada Anahtar için özel bir kayıt kullanılır ve değer için özel bir nesne / sınıf kullanılır.

Bir uzmanın kullanımını not edin TObjectDictionary burada. TObjectDictionary nesnelerin ömrünü otomatik olarak işleyebilir.

Anahtar değeri sıfır olamazken, Değer değeri olabilir.

Bir TObjectDictionary başlatıldığında, bir Sahiplik parametresi sözlüğün anahtarlara, değerlere veya her ikisine birden sahip olup olmadığını belirtir ve bu nedenle bellek sızıntısı olmamasına yardımcı olur.

instagram story viewer