C# Hashtable με Παραδείγματα
⚡ Έξυπνη Σύνοψη
Το Hashtable σε C# είναι μια συλλογή από τον χώρο ονομάτων System.Collections που αποθηκεύει δεδομένα ως ζεύγη κλειδιού-τιμής, όπου κάθε μοναδικό κλειδί αντιστοιχεί σε μια τιμή και το κλειδί παρέχει γρήγορη αναζήτηση αυτής της αποθηκευμένης τιμής.

Τι είναι το Hashtable στο C#;
Ένας πίνακας κατακερματισμού είναι μια ειδική συλλογή που χρησιμοποιείται για την αποθήκευση στοιχείων κλειδιού-τιμής. Έτσι, αντί να αποθηκεύεται μόνο μία τιμή όπως η στοίβα, η λίστα πίνακα και η ουρά, ο πίνακας κατακερματισμού αποθηκεύει 2 τιμές. Αυτές οι 2 τιμές αποτελούν ένα στοιχείο του πίνακα κατακερματισμού.
Παρακάτω είναι μερικά παραδείγματα για το πώς μπορεί να φαίνονται οι τιμές ενός πίνακα κατακερματισμού.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Παραπάνω έχουμε 3 ζεύγη τιμών κλειδιών. Τα κλειδιά κάθε στοιχείου είναι 001, 002 και 003 αντίστοιχα. Οι τιμές κάθε ζεύγους βασικών τιμών είναι ". Καθαρά", "C#" και "ASP.Net" αντίστοιχα.
Ας δούμε τις λειτουργίες που είναι διαθέσιμες για τη συλλογή Hashtable με περισσότερες λεπτομέρειες.
Δήλωση του Hashtable
Η δήλωση ενός Hashtable φαίνεται παρακάτω. Ένα Hashtable δημιουργείται με τη βοήθεια του Hashtable Datatype. Η λέξη-κλειδί "νέα" χρησιμοποιείται για τη δημιουργία ενός αντικειμένου ενός Hashtable. Στη συνέχεια, το αντικείμενο εκχωρείται στη μεταβλητή ht.
Hashtable ht = new Hashtable()
Προσθήκη στοιχείων στο Hashtable
Η μέθοδος Προσθήκη χρησιμοποιείται για την προσθήκη ενός στοιχείου στο ουρά. Η γενική σύνταξη της δήλωσης δίνεται παρακάτω
HashTable.add("key","value")
Παράδειγμα 1:
Να θυμάστε ότι κάθε στοιχείο του πίνακα κατακερματισμού αποτελείται από 2 τιμές, η μία είναι το κλειδί και η άλλη η τιμή.
Τώρα, ας δούμε ότι αυτό λειτουργεί σε επίπεδο κώδικα. Όλος ο κώδικας που αναφέρεται παρακάτω θα εγγραφεί στην εφαρμογή Console μας.
Ο κώδικας θα γραφτεί στο αρχείο μας Program.cs. Στο παρακάτω πρόγραμμα, θα γράψουμε τον κώδικα για να δούμε πώς μπορούμε να χρησιμοποιήσουμε τις προαναφερθείσες μεθόδους.
Προς το παρόν, στο παράδειγμά μας, θα δούμε απλώς πώς μπορούμε να δημιουργήσουμε ένα hashtable , να προσθέσουμε στοιχεία στο hashtable και να τα εμφανίσουμε ανάλογα.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code Εξήγηση:-
- Αρχικά, δηλώνουμε τη μεταβλητή hashtable χρησιμοποιώντας τον τύπο δεδομένων Hashtable χρησιμοποιώντας τη λέξη-κλειδί "Νέο". Το όνομα της μεταβλητής που ορίζει είναι 'ht'.
- Στη συνέχεια προσθέτουμε στοιχεία στον πίνακα κατακερματισμού χρησιμοποιώντας τη μέθοδο Προσθήκη. Να θυμάστε ότι πρέπει να προσθέσουμε και ένα βασικό και ένα στοιχείο αξίας όταν προσθέτουμε κάτι στο hashtable.
- Δεν υπάρχει άμεσος τρόπος εμφάνισης των στοιχείων ενός πίνακα κατακερματισμού.
- Για να εμφανίσουμε το hashtable , πρέπει πρώτα να λάβουμε τη λίστα των κλειδιών (001, 002 και 003) από τον πίνακα κατακερματισμού.
- Αυτό γίνεται μέσω της διεπαφής ICollection. Αυτός είναι ένας ειδικός τύπος δεδομένων που μπορεί να χρησιμοποιηθεί για την αποθήκευση των κλειδιών συλλογών με δυνατότητα κατακερματισμού. Στη συνέχεια, εκχωρούμε τα κλειδιά της συλλογής hashtable στη μεταβλητή 'κλειδιά'.
- Στη συνέχεια, για κάθε τιμή κλειδιού, παίρνουμε τη σχετική τιμή στο hashtable χρησιμοποιώντας τη δήλωση ht[k].
Εάν ο παραπάνω κωδικός εισαχθεί σωστά και το πρόγραμμα εκτελεστεί, θα εμφανιστεί η ακόλουθη έξοδος.
Παραγωγή:
Ας δούμε μερικές ακόμη διαθέσιμες μεθόδους για πίνακες κατακερματισμού.
ContainsKey
Αυτή η μέθοδος χρησιμοποιείται για να δούμε εάν υπάρχει ένα κλειδί στο Hashtable. Παρακάτω είναι η γενική σύνταξη αυτής της δήλωσης. Η δήλωση θα επιστρέψει true εάν υπάρχει το κλειδί, διαφορετικά θα επιστρέψει την τιμή false.
Hashtable.Containskey(key)
ContainsValue
Αυτή η μέθοδος χρησιμοποιείται για να δούμε εάν υπάρχει μια τιμή στο Hashtable. Παρακάτω είναι η γενική σύνταξη αυτής της δήλωσης. Η δήλωση θα επιστρέψει true εάν υπάρχει η τιμή, διαφορετικά θα επιστρέψει την τιμή false.
Hashtable.ContainsValue(value)
Παράδειγμα 2:
Ας αλλάξουμε τον κωδικό στο δικό μας Εφαρμογή κονσόλας για να δείξουμε πώς μπορούμε να χρησιμοποιήσουμε τη μέθοδο "Containskey" και "ContainsValue".
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code Εξήγηση:-
- Αρχικά, χρησιμοποιούμε τη μέθοδο ContainsKey για να δούμε αν το κλειδί υπάρχει στο hashtable. Αυτή η μέθοδος θα επιστρέψει true εάν το κλειδί υπάρχει στο hashtable. Αυτή η μέθοδος θα πρέπει να επιστρέψει true καθώς το κλειδί υπάρχει στο hashtable.
- Στη συνέχεια χρησιμοποιούμε τη μέθοδο ContainsValue για να δούμε αν η τιμή υπάρχει στο hashtable. Αυτή η μέθοδος θα επιστρέψει "true" καθώς η τιμή υπάρχει στο hashtable.
Εάν ο παραπάνω κωδικός εισαχθεί σωστά και το πρόγραμμα εκτελεστεί, θα εμφανιστεί η ακόλουθη έξοδος.
Παραγωγή:
Από την έξοδο, μπορείτε να δείτε ξεκάθαρα ότι τόσο το κλειδί όσο και η τιμή που αναζητάτε υπάρχουν στον πίνακα κατακερματισμού.
Πώς να κάνετε επανάληψη σε ένα C# Hashtable
Τα παραπάνω παραδείγματα διαβάζουν τιμές μέσω της συλλογής Κλειδιά, αλλά ένα Hashtable μπορεί να διαβαστεί με πιο καθαρό τρόπο. Ένας βρόχος foreach μέσω ενός DictionaryEntry σας δίνει το κλειδί και την τιμή κάθε στοιχείου μαζί με ένα μόνο πέρασμα, που είναι ο πιο συνηθισμένος τρόπος ανάγνωσης ενός Hashtable.
Βήμα 1) Δημιουργήστε ένα Hashtable και προσθέστε τρία ζεύγη κλειδιού-τιμής σε αυτό.
Βήμα 2) Πραγματοποιήστε επανάληψη πάνω από τον πίνακα καταχώρησης (Hashtable) με μια μεταβλητή DictionaryEntry και, στη συνέχεια, διαβάστε τις ιδιότητες Κλειδί και Τιμή κάθε καταχώρησης.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code Εξήγηση:-
- Δημιουργείται ένας πίνακας κατακερματισμού (Hashtable) με το όνομα ht και εισάγονται τρία ζεύγη κλειδιού-τιμής με τη μέθοδο Add.
- Ο βρόχος foreach αντιστοιχίζει κάθε στοιχείο σε μια DictionaryEntry, της οποίας οι ιδιότητες Key και Value εκθέτουν τα δύο μισά του ζεύγους.
Όταν εκτελείται το πρόγραμμα, εκτυπώνει κάθε κλειδί δίπλα στην τιμή του, όπως 101 – JavaΕπειδή ένας πίνακας κατακερματισμού (Hashtable) δεν διατηρεί τη σειρά εισαγωγής, τα ζεύγη ενδέχεται να εμφανίζονται με διαφορετική ακολουθία από αυτήν που προστέθηκαν. Για να διαβάσετε μόνο τα κλειδιά, επαναλάβετε τη συλλογή Κλειδιά και για να διαβάσετε μόνο τις τιμές, επαναλάβετε τη συλλογή Τιμές.
Μέθοδοι και Ιδιότητες Hashtable C#
Η κλάση Hashtable παρουσιάζει ένα μικρό σύνολο μεθόδων και ιδιοτήτων που καλύπτουν σχεδόν κάθε εργασία που θα χρειαστείτε, από την προσθήκη και την αφαίρεση ζευγών έως τον έλεγχο της ιδιότητας μέλους και την καταμέτρηση στοιχείων. Τα πιο χρήσιμα μέλη παρατίθενται παρακάτω.
| Μέλος | Χαρακτηριστικά | Περιγραφή |
|---|---|---|
| Προσθήκη(κλειδί, τιμή) | Μέθοδος | Εισάγει ένα νέο ζεύγος κλειδιού και τιμής. Το κλειδί πρέπει να είναι μοναδικό. |
| Αφαίρεση (κλειδί) | Μέθοδος | Διαγράφει το στοιχείο που ταιριάζει με το καθορισμένο κλειδί. |
| Σαφή() | Μέθοδος | Αφαιρεί κάθε ζεύγος κλειδιού-τιμής από τον πίνακα κατακερματισμού. |
| ΠεριέχειΚλειδί(κλειδί) | Μέθοδος | Επιστρέφει true όταν το δεδομένο κλειδί είναι παρόν. |
| ΠεριέχειΤιμή(τιμή) | Μέθοδος | Επιστρέφει true όταν η δεδομένη τιμή υπάρχει. |
| Κόμης | Ιδιοκτησία | Λαμβάνει τον αριθμό των αποθηκευμένων ζευγών κλειδιού-τιμής. |
| Κλειδιά | Ιδιοκτησία | Επιστρέφει μια συλλογή όλων των κλειδιών. |
| Αξίες | Ιδιοκτησία | Επιστρέφει μια συλλογή όλων των τιμών. |
Επειδή κάθε κλειδί είναι κατακερματισμένο, το ContainsKey και ο ευρετηριαστής εντοπίζουν ένα στοιχείο σε σχεδόν σταθερό χρόνο, κάτι που καθιστά ένα Hashtable τόσο χρήσιμο για γρήγορες αναζητήσεις.
Διαφορά μεταξύ Hashtable και Λεξικού σε C#
Ένα Hashtable και ένα Dictionary αποθηκεύουν ζεύγη κλειδιού-τιμής και ανήκουν στην ευρύτερη οικογένεια της C#. συλλογέςΗ σημαντική διαφορά είναι η ασφάλεια τύπου και αυτή η διαφορά αποφασίζει ποιον τύπο πρέπει να επιλέξετε στον νέο κώδικα.
- Ασφάλεια τύπου: Ένα Hashtable αποθηκεύει κάθε κλειδί και τιμή ως αντικείμενο, ενώ το Dictionary είναι γενικό, επομένως ο μεταγλωττιστής ελέγχει τους τύπους που χρησιμοποιείτε.
- Χώρος ονομάτων: Το Hashtable βρίσκεται στο System.Collections, ενώ το Dictionary βρίσκεται στο System.Collections.Generic.
- Box: Ένα Hashtable περιέχει τύπους τιμών όπως int, αλλά ένα γενικό λεξικό τους αποθηκεύει απευθείας και αποφεύγει αυτό το κόστος.
- Απόδοση: Το λεξικό είναι συνήθως πιο γρήγορο επειδή δεν χρειάζεται να μεταφερθεί πίσω από το αντικείμενο όταν διαβάζετε μια τιμή.
- Ασφάλεια νήματος: Το Hashtable προσφέρει το Syncχρονικό περιτύλιγμα για έναν συγγραφέα με πολλούς αναγνώστες, ενώ ο ταυτόχρονος κώδικας συνήθως επιλέγει το ConcurrentDictionary.
Για κάθε νέο έργο, το γενικό λεξικό είναι η συνιστώμενη επιλογή και το μη γενικό Hashtable εμφανίζεται κυρίως σε παλαιότερο κώδικα.




