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

Στο προηγούμενο μάθημά μας, μάθαμε πώς μπορούμε να χρησιμοποιούμε πίνακες στο C#. Ας κάνουμε μια γρήγορη επισκόπηση, οι πίνακες στον προγραμματισμό χρησιμοποιούνται για την ομαδοποίηση ενός συνόλου σχετικών αντικειμένων. Έτσι, θα μπορούσε κανείς να δημιουργήσει έναν πίνακα ή ένα σύνολο ακεραίων, στους οποίους θα μπορούσε να προσπελαστεί μέσω ενός ονόματος μεταβλητής.
Τι είναι οι Συλλογές στο C#;
Οι συλλογές είναι παρόμοιες με Array, παρέχει έναν πιο ευέλικτο τρόπο εργασίας με μια ομάδα αντικειμένων.
Στους πίνακες, θα είχατε παρατηρήσει ότι πρέπει να ορίσετε τον αριθμό των στοιχείων σε έναν πίνακα εκ των προτέρων. Αυτό έπρεπε να γίνει όταν δηλώθηκε ο πίνακας.
Αλλά σε μια συλλογή, δεν χρειάζεται να ορίσετε το μέγεθος της συλλογής εκ των προτέρων. Μπορείτε να προσθέσετε στοιχεία ή ακόμα και να αφαιρέσετε στοιχεία από τη συλλογή ανά πάσα στιγμή. Αυτό το κεφάλαιο θα επικεντρωθεί στο πώς μπορούμε να εργαστούμε με τις διάφορες συλλογές που είναι διαθέσιμες σε C#.
System.Collections Classes
Το .NET Framework ομαδοποιεί τις αρχικές μη γενικές κλάσεις συλλογών μέσα στον χώρο ονομάτων System.Collections. Ο παρακάτω πίνακας συνοψίζει τους κύριους τύπους που μπορείτε να χρησιμοποιήσετε αμέσως.
| Συλλογή | Περιγραφή |
| Λίστα Array | Η συλλογή ArrayList είναι παρόμοια με τους Arrays τύπος δεδομένων σε C#. Η μεγαλύτερη διαφορά είναι η δυναμική φύση της συλλογής λίστας πίνακα. |
| Στοίβα | Η στοίβα είναι μια συλλογή ειδικών περιπτώσεων που αντιπροσωπεύει την έννοια του τελευταίου εισερχόμενου πρώτου εξερχόμενου (LIFO). |
| ουρές | Η Ουρά είναι μια συλλογή ειδικών περιπτώσεων που αντιπροσωπεύει την ιδέα του "ό,τι μπαίνει πρώτο, πρώτο βγαίνει". |
| Hashtable | Ένας πίνακας κατακερματισμού είναι μια ειδική συλλογή που χρησιμοποιείται για την αποθήκευση στοιχείων κλειδιού-τιμής. |
| Ταξινομημένη Λίστα | Η SortedList είναι μια συλλογή που αποθηκεύει ζεύγη κλειδιών-τιμών με αύξουσα σειρά κλειδιού από προεπιλογή. |
| BitArray | Ένας πίνακας bit είναι ένας πίνακας δομής δεδομένων που αποθηκεύει bits. |
Γενικές συλλογές σε C#
Οι μη γενικές κλάσεις παραπάνω αποθηκεύουν κάθε στοιχείο ως γενικό αντικείμενο, πράγμα που σημαίνει ότι ο μεταγλωττιστής δεν μπορεί να ελέγξει τον τύπο και το πρόγραμμα πληρώνει ένα μικρό κόστος για τιμές σε κουτιά. Για να λύσει αυτό το πρόβλημα, η C# πρόσθεσε τον χώρο ονομάτων System.Collections.Generic, όπου κάθε συλλογή είναι συνδεδεμένη με έναν δηλωμένο τύπο.
Μια γενική συλλογή όπως η Λίστα Δέχεται μόνο συμβολοσειρές, επομένως τα λάθη εντοπίζονται κατά τη μεταγλώττιση και δεν απαιτείται μετατροπή όταν διαβάζετε ένα στοιχείο ξανά. Αυτό καθιστά τις γενικές συλλογές ασφαλέστερες, ταχύτερες και πιο εύκολες στην ανάγνωση, γι' αυτό και αποτελούν την προεπιλεγμένη επιλογή στον σύγχρονο κώδικα C#.
Οι πιο συνηθισμένες γενικές συλλογές παρατίθενται παρακάτω:
- Λίστα : Μια λίστα με δυνατότητα αλλαγής μεγέθους, βασισμένη σε ευρετήριο, η γενική αντικατάσταση του ArrayList.
- Λεξικό : Αποθηκεύει ζεύγη κλειδιού-τιμής με γρήγορες αναζητήσεις που βασίζονται σε κατακερματισμό.
- HashSet : Διατηρεί μόνο μοναδικές τιμές και υποστηρίζει λειτουργίες συνόλου όπως η ένωση.
- Ουρά : Μια συλλογή με την πρώτη είσοδο και την πρώτη έξοδο, η γενική έκδοση του Queue.
- Σωρός : Μια συλλογή που εισέρχεται πρώτος βγαίνει, η γενική έκδοση του Stack.
- ΤαξινομημένηΛίστα : Διατηρεί τα ζεύγη κλειδιού-τιμής ταξινομημένα κατά κλειδί σε αύξουσα σειρά.
Παράδειγμα Συλλογής Λιστών σε C#
Η Λίστα είναι η πιο ευρέως χρησιμοποιούμενη γενική συλλογή επειδή συμπεριφέρεται σαν δυναμικός πίνακας. Το παρακάτω παράδειγμα δημιουργεί μια λίστα συμβολοσειρών, προσθέτει και αφαιρεί στοιχεία, διαβάζει το μέγεθός της και στη συνέχεια εκτυπώνει τις υπόλοιπες τιμές. Όλος ο κώδικας είναι γραμμένος στο αρχείο Program.cs.
Βήμα 1) Εισαγάγετε τον χώρο ονομάτων System.Collections.Generic και δηλώστε μια λίστα συμβολοσειρών.
Βήμα 2) Προσθέστε στοιχεία με τη μέθοδο Προσθήκη και διαγράψτε ένα με τη μέθοδο Αφαίρεση.
Βήμα 3) Διαβάστε την ιδιότητα Count και, στη συνέχεια, κάντε επανάληψη στη λίστα με μια εντολή foreach.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code Εξήγηση:-
- Ο χώρος ονομάτων System.Collections.Generic εισάγεται, ώστε ο τύπος Λίστας να είναι διαθέσιμος στο πρόγραμμα.
- Μια νέα λίστα Δημιουργείται ένα αρχείο με την ονομασία tutorials και προστίθενται τρία ονόματα με τη μέθοδο Add.
- Η μέθοδος Remove διαγράφει την τιμή "Python», το οποίο αφήνει δύο στοιχεία στη λίστα.
- Η ιδιότητα Count επιστρέφει τον αριθμό των στοιχείων και ο βρόχος foreach εκτυπώνει κάθε υπόλοιπη τιμή με τη σειρά.
Όταν εκτελείται το πρόγραμμα, αρχικά εκτυπώνει τον αριθμό των 2, Ακολουθούμενη από Java και Κοτλίν σε ξεχωριστές γραμμές. Αυτό δείχνει πώς μια συλλογή αλλάζει το μέγεθός της κατά τον χρόνο εκτέλεσης, κάτι που ένας σταθερός πίνακας δεν μπορεί να κάνει.
Διαφορά μεταξύ πινάκων και συλλογών σε C#
Και τα δύο ένα παράταξη και μια συλλογή ομαδοποιούν σχετικά στοιχεία κάτω από ένα όνομα, ωστόσο συμπεριφέρονται διαφορετικά όταν εκτελείται το πρόγραμμα. Γνωρίζοντας πότε να χρησιμοποιείτε το καθένα, σας βοηθά να γράφετε καθαρότερο και πιο αποτελεσματικό κώδικα.
Οι κύριες διαφορές παρατίθενται παρακάτω:
- Διαστάσεις: Ένας πίνακας έχει ένα σταθερό μήκος που ορίζεται κατά τη δήλωση, ενώ μια συλλογή μπορεί να αυξηθεί ή να συρρικνωθεί ανά πάσα στιγμή.
- Χειρισμός τύπων: Ένας πίνακας αποθηκεύει έναν μόνο τύπο, ενώ μια συλλογή μπορεί να είναι ασφαλής ως προς τους τύπους με γενικούς τύπους ή να περιέχει αντικείμενα μικτών τύπων όταν δεν είναι γενικοί.
- Περιοχή: Οι πίνακες είναι ενσωματωμένοι στη γλώσσα, ενώ οι κλάσεις συλλογών βρίσκονται στους χώρους ονομάτων System.Collections και System.Collections.Generic.
- Ενσωματωμένες λειτουργίες: Οι συλλογές προσφέρουν έτοιμες μεθόδους για την προσθήκη, την αφαίρεση, την αναζήτηση και την ταξινόμηση στοιχείων, ενώ οι πίνακες παρέχουν μόνο βασική πρόσβαση με ευρετήριο.
- καλύτερη χρήση: Επιλέξτε έναν πίνακα όταν ο αριθμός των στοιχείων είναι γνωστός και σταθερός, και μια συλλογή όταν ο αριθμός αλλάζει καθώς εκτελείται το πρόγραμμα.
Με λίγα λόγια, οι πίνακες είναι οι καλύτεροι για δεδομένα σταθερού μεγέθους, ενώ οι συλλογές παρέχουν την ευελιξία που χρειάζονται οι περισσότερες εφαρμογές του πραγματικού κόσμου.
