Menggunakan TDictionary untuk Hash Tables di Delphi

Diperkenalkan pada Delphi 2009, the Kelas TDictionary, didefinisikan dalam Generics. Unit koleksi, merupakan koleksi tipe tabel hash generik dari pasangan nilai kunci.

Jenis generik, juga diperkenalkan di Delphi 2009, memungkinkan Anda untuk mendefinisikan kelas yang tidak secara spesifik mendefinisikan tipe anggota data.

Kamus, dengan cara, mirip dengan array. Dalam sebuah Himpunan Anda bekerja dengan serangkaian (kumpulan) nilai yang diindeks oleh nilai integer, yang bisa berupa apa saja nilai tipe ordinal. Indeks ini memiliki batas bawah dan atas.

Dalam kamus, Anda dapat menyimpan kunci dan nilai-nilai tempat jenis apa pun.

Konstruktor TDictionary

Karenanya deklarasi konstruktor TDictionary:

Dalam Delphi, TDictionary didefinisikan sebagai tabel hash. Tabel hash mewakili kumpulan pasangan kunci dan nilai yang disusun berdasarkan kode hash kunci. Tabel hash dioptimalkan untuk pencarian (kecepatan). Ketika pasangan nilai kunci ditambahkan ke tabel hash, hash kunci dihitung dan disimpan bersama dengan pasangan yang ditambahkan.

instagram viewer

Nilai TKey dan TV, karena mereka generik, bisa dari jenis apa saja. Misalnya, jika informasi yang Anda simpan di kamus berasal dari beberapa basis data, Kunci Anda dapat berupa GUID (atau beberapa nilai lain yang menyajikan indeks unik) nilai sementara Nilai dapat menjadi objek yang dipetakan ke deretan data dalam database Anda meja.

Menggunakan TDictionary

Demi kesederhanaan, contoh di bawah ini menggunakan bilangan bulat untuk TKey dan karakter untuk nilai TV.

Pertama, kami mendeklarasikan kamus kami dengan menentukan tipe-tipe dari nilai TKey dan TV tersebut:

Kemudian kamus diisi menggunakan metode Tambah. Karena kamus tidak dapat memiliki dua pasangan dengan nilai kunci yang sama, Anda dapat menggunakan metode ContainsKey untuk memeriksa apakah beberapa pasangan bernilai kunci sudah ada di dalam kamus.

Untuk menghapus pasangan dari kamus, gunakan metode Hapus. Metode ini tidak akan menimbulkan masalah jika pasangan dengan kunci yang ditentukan bukan bagian dari kamus.

Untuk melewati semua pasangan dengan memutar melalui tombol Anda dapat melakukan a untuk dalam lingkaran.

Gunakan metode TryGetValue untuk memeriksa apakah beberapa pasangan nilai kunci disertakan dalam kamus.

Menyortir Kamus

Karena kamus adalah tabel hash, kamus tidak menyimpan item dalam urutan sortir yang ditentukan. Untuk beralih melalui kunci yang diurutkan untuk memenuhi kebutuhan spesifik Anda, manfaatkan TList - jenis pengumpulan umum yang mendukung penyortiran.

Kode di atas mengurutkan kunci naik dan turun dan mengambil nilai seolah-olah disimpan dalam urutan diurutkan dalam kamus. Penyortiran menurun dari nilai-nilai kunci tipe integer menggunakan TComparer dan metode anonim.

Ketika Kunci dan Nilai Berada pada Jenis TObject

Contoh yang tercantum di atas adalah yang sederhana karena kunci dan nilainya adalah tipe sederhana. Anda dapat memiliki kamus kompleks di mana kunci dan nilainya adalah tipe "kompleks" seperti catatan atau objek.

Ini contoh lain:

Di sini catatan kustom digunakan untuk Kunci dan objek / kelas kustom digunakan untuk nilai.

Perhatikan penggunaan khusus TObjectDictionary kelas di sini. TObjectDictionary dapat menangani masa hidup objek secara otomatis.

Nilai kunci tidak boleh nol, sedangkan nilai nilai bisa.

Ketika TObjectDictionary adalah instantiated, parameter Kepemilikan menentukan apakah kamus memiliki kunci, nilai atau keduanya - dan karenanya membantu Anda tidak memiliki kebocoran memori.

instagram story viewer