Εκμάθηση C# ArrayList με παραδείγματα

⚡ Έξυπνη Σύνοψη

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

  • 🔄 Δυναμική διαστασιολόγηση: Το ArrayList προσθέτει και αφαιρεί στοιχεία κατά τον χρόνο εκτέλεσης, επομένως δεν καθορίζετε τον αριθμό των στοιχείων εκ των προτέρων όπως σε έναν πίνακα.
  • 📦 Αποθήκευση αντικειμένων: Κάθε στοιχείο αποθηκεύεται ως αντικείμενο, το οποίο επιτρέπει σε ένα ArrayList να διατηρεί μικτούς τύπους δεδομένων όπως int, string και bool.
  • Βασικές μέθοδοι: Οι λειτουργίες Add (Προσθήκη), Insert (Εισαγωγή), Remove (Κατάργηση), RemoveAt (Αφαίρεση), Contains (Περιέχει) και Sort (Ταξινόμηση) καλύπτουν τις καθημερινές λειτουργίες σε ένα ArrayList.
  • 📊 Αριθμός και χωρητικότητα: Η ιδιότητα Count επιστρέφει τον τρέχοντα αριθμό στοιχείων, ενώ η Capacity είναι ο εκχωρημένος χώρος αποθήκευσης.
  • Σύγχρονη επιλογή: Microsoft Συνιστά τη γενική λίστα για νέο κώδικα επειδή προσθέτει ασφάλεια τύπων κατά τη μεταγλώττιση και αποφεύγει την κωδικοποίηση σε «κουκκία».
  • 🤖 Βοήθεια AI: Τα scaffold του GitHub Copilot χρησιμοποιούν κώδικα ArrayList και οι αγωγοί ML.NET μεταδίδουν δεδομένα μέσω τύπων συλλογής C#.

C# ArrayList

Τι είναι το ArrayList στο C#;

Η συλλογή ArrayList είναι παρόμοια με την Array τύπος δεδομένων σε C#. Η μεγαλύτερη διαφορά είναι η δυναμική φύση της συλλογής λίστας πίνακα.

Για πίνακες, πρέπει να ορίσετε τον αριθμό των στοιχείων που μπορεί να περιέχει ο πίνακας τη στιγμή της δήλωσης του πίνακα. Αλλά στην περίπτωση της συλλογής Array List, αυτό δεν χρειάζεται να γίνει εκ των προτέρων. Τα στοιχεία μπορούν να προστεθούν ή να αφαιρεθούν από τη συλλογή Array List ανά πάσα στιγμή. Ας δούμε τις λειτουργίες που είναι διαθέσιμες για τη συλλογή λίστας πίνακα με περισσότερες λεπτομέρειες.

Δήλωση μιας λίστας πίνακα

Η δήλωση μιας ArrayList παρέχεται παρακάτω. Μια λίστα πίνακα δημιουργείται με τη βοήθεια του τύπου δεδομένων ArrayList. Η λέξη-κλειδί "νέα" χρησιμοποιείται για τη δημιουργία ενός αντικειμένου μιας ArrayList. Στη συνέχεια, το αντικείμενο εκχωρείται στη μεταβλητή a1. Έτσι τώρα η μεταβλητή a1 θα χρησιμοποιηθεί για πρόσβαση στα διάφορα στοιχεία της λίστας πίνακα.

ArrayList a1 = new ArrayList()

Προσθήκη στοιχείων σε έναν πίνακα

Η μέθοδος προσθήκης χρησιμοποιείται για την προσθήκη ενός στοιχείου στη λίστα ArrayList. Η μέθοδος προσθήκης μπορεί να χρησιμοποιηθεί για την προσθήκη οποιουδήποτε είδους στοιχείου τύπου δεδομένων στη λίστα πίνακα. Έτσι, μπορείτε να προσθέσετε έναν ακέραιο ή μια συμβολοσειρά ή ακόμα και μια τιμή Boolean στη λίστα πίνακα. Η γενική σύνταξη της μεθόδου πρόσθεσης δίνεται παρακάτω

ArrayList.add(element)

Παρακάτω είναι μερικά παραδείγματα για το πώς μπορεί να χρησιμοποιηθεί η μέθοδος "προσθήκη". Η μέθοδος προσθήκης μπορεί να χρησιμοποιηθεί για την προσθήκη διαφόρων τύπων δεδομένων στη συλλογή Array List.

Παρακάτω μπορείτε να δείτε παραδείγματα για το πώς μπορούμε να προσθέσουμε ακέραιες συμβολοσειρές και ακόμη και τιμές Boolean στη συλλογή Array List.

  • a1.add(1) – Αυτό θα προσθέσει μια ακέραια τιμή στη συλλογή
  • a1.add("Παράδειγμα") – Αυτό θα προσθέσει μια τιμή String στη συλλογή
  • a1.add(true) – Αυτό θα προσθέσει μια Boolean τιμή στη συλλογή

Τώρα ας δούμε ότι αυτό λειτουργεί σε επίπεδο κώδικα. Όλος ο κώδικας που αναφέρεται παρακάτω θα εγγραφεί στην εφαρμογή Console μας. Ο κώδικας θα γραφτεί στο αρχείο μας Program.cs.

Στο παρακάτω πρόγραμμα, θα γράψουμε τον κώδικα για να δημιουργήσουμε μια νέα λίστα πίνακα. Θα δείξουμε επίσης την προσθήκη στοιχείων και την εμφάνιση των στοιχείων της λίστας Array.

ArrayList σε C#

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)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1[0]);	  
   Console.WriteLine(a1[1]);
   Console.WriteLine(a1[2]);
   Console.ReadKey();
  }
 }
}

Code Εξήγηση:-

  1. Το πρώτο βήμα χρησιμοποιείται για να δηλώσουμε τη Λίστα Πίνακα. Εδώ δηλώνουμε το a1 ως μεταβλητή για να κρατήσει τα στοιχεία της λίστας του πίνακα μας.
  2. Στη συνέχεια, χρησιμοποιούμε τη λέξη-κλειδί προσθήκη για να προσθέσουμε τον αριθμό 1, τη συμβολοσειρά "Παράδειγμα" και τη Boolean τιμή "true" στη λίστα πίνακα.
  3. Στη συνέχεια χρησιμοποιούμε τη μέθοδο Console.WriteLine για να εμφανίσουμε την τιμή κάθε στοιχείου λίστας πίνακα στην κονσόλα. Θα παρατηρήσετε ότι όπως και οι πίνακες, μπορούμε να έχουμε πρόσβαση στα στοιχεία μέσω των θέσεων ευρετηρίου τους. Έτσι, για να αποκτήσουμε πρόσβαση στην πρώτη θέση της λίστας πίνακα, χρησιμοποιούμε τη θέση ευρετηρίου [0]. Και ούτω καθεξής και ούτω καθεξής.

Εάν ο παραπάνω κωδικός εισαχθεί σωστά και το πρόγραμμα εκτελεστεί, θα εμφανιστεί η ακόλουθη έξοδος.

Παραγωγή:

ArrayList σε C#

Από την έξοδο, μπορείτε να δείτε ότι όλα τα στοιχεία από τη λίστα πίνακα αποστέλλονται στην κονσόλα.

Ας δούμε μερικές ακόμη μεθόδους που είναι διαθέσιμες ως μέρος του ArrayList.

Κόμης

Αυτή η μέθοδος χρησιμοποιείται για τη λήψη του αριθμού των στοιχείων στη συλλογή ArrayList. Παρακάτω είναι η γενική σύνταξη αυτής της δήλωσης.

ArrayList.Count() – Αυτή η μέθοδος θα επιστρέψει τον αριθμό των στοιχείων που περιέχει η λίστα πίνακα.

Περιέχει

Αυτή η μέθοδος χρησιμοποιείται για να δούμε εάν υπάρχει ένα στοιχείο στη συλλογή ArrayList. Παρακάτω είναι η γενική σύνταξη αυτής της δήλωσης

ArrayList.Contains(element) – Αυτή η μέθοδος θα επιστρέψει true εάν το στοιχείο υπάρχει στη λίστα, διαφορετικά θα επιστρέψει false.

RemoveAt

Αυτή η μέθοδος χρησιμοποιείται για την αφαίρεση ενός στοιχείου σε μια συγκεκριμένη θέση στη συλλογή ArrayList. Παρακάτω είναι η γενική σύνταξη αυτής της δήλωσης

ArrayList.RemoveAt(index) – Αυτή η μέθοδος θα αφαιρέσει ένα στοιχείο από μια συγκεκριμένη θέση της λίστας Array.

Τώρα ας δούμε ότι αυτό λειτουργεί σε επίπεδο κώδικα. Όλος ο κώδικας που αναφέρεται παρακάτω θα εγγραφεί στην εφαρμογή Console μας. Ο κώδικας θα γραφτεί στο αρχείο μας Program.cs.

Στο παρακάτω πρόγραμμα, θα γράψουμε τον κώδικα για να δούμε πώς μπορούμε να χρησιμοποιήσουμε τις προαναφερθείσες μεθόδους.

ArrayList σε C#

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)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1.Count);
   Console.WriteLine(a1.Contains(2));
   Console.WriteLine(a1[1]);
   a1.RemoveAt(1);
   Console.WriteLine(a1[1]);
   Console.ReadKey();
  }
 }
}

Code Εξήγηση:-

  1. Έτσι, η πρώτη ιδιότητα που βλέπουμε είναι η ιδιότητα Count. Λαμβάνουμε την ιδιότητα Count της λίστας πίνακα a1 και στη συνέχεια την γράφουμε στην Κονσόλα.
  2. Στο δεύτερο μέρος, χρησιμοποιούμε τη μέθοδο Contains για να δούμε αν η ArrayList a1 περιέχει το στοιχείο 2. Στη συνέχεια, γράφουμε το αποτέλεσμα στην Κονσόλα μέσω της εντολής Writeline.
  3. Τέλος, για να παρουσιάσουμε τη μέθοδο Remove element, εκτελούμε τα παρακάτω βήματα:
    1. Αρχικά, γράφουμε την τιμή του στοιχείου στη θέση 1 του ευρετηρίου της λίστας πίνακα στην κονσόλα.
    2. Στη συνέχεια αφαιρούμε το στοιχείο στη θέση 1 του ευρετηρίου της λίστας πίνακα.
    3. Τέλος, γράφουμε ξανά την τιμή του στοιχείου στη θέση Index 1 της λίστας πίνακα στην κονσόλα. Αυτό το σύνολο βημάτων θα δώσει μια δίκαιη ιδέα εάν η μέθοδος αφαίρεσης θα λειτουργήσει όπως θα έπρεπε.

Εάν ο παραπάνω κωδικός εισαχθεί σωστά και το πρόγραμμα εκτελεστεί, θα εμφανιστεί η ακόλουθη έξοδος.

Παραγωγή:

ArrayList σε C#

Γιατί ισχύει η τελευταία τιμή;

Εάν δείτε την ακολουθία των γεγονότων, το στοιχείο Παράδειγμα αφαιρείται από τον πίνακα επειδή βρίσκεται στη θέση 1. Στη συνέχεια, η θέση 1 του πίνακα αντικαθίσταται από ό,τι ήταν στη θέση 2 νωρίτερα και η τιμή "true"

Πώς να κάνετε επανάληψη σε μια λίστα πινάκων C#

Η ανάγνωση κάθε στοιχείου ενός ArrayList είναι μια συνηθισμένη εργασία. Επειδή ένα ArrayList αποθηκεύει τα στοιχεία του ως αντικείμενα, μπορείτε να τα επισκεφθείτε με έναν βρόχο foreach ή με έναν βρόχο for που χρησιμοποιεί την ιδιότητα Count. Ο βρόχος foreach είναι ο απλούστερος τρόπος, καθώς περιηγείται σε κάθε στοιχείο με τη σειρά χωρίς να χρειάζεται ευρετήριο.

Το παρακάτω παράδειγμα δημιουργεί μια ArrayList συμβολοσειρών και εκτυπώνει κάθε τιμή σε ξεχωριστή γραμμή. Ο κώδικας είναι γραμμένος στο αρχείο Program.cs μιας εφαρμογής Console.

Βήμα 1) Εισαγάγετε τον χώρο ονομάτων System.Collections και δημιουργήστε ένα ArrayList με τρία στοιχεία.

Βήμα 2) Χρησιμοποιήστε έναν βρόχο foreach για να διαβάσετε κάθε στοιχείο ως αντικείμενο και να το γράψετε στην κονσόλα.

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add("Java");
   a1.Add("Python");
   a1.Add("Kotlin");
   foreach (object item in a1)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Code Εξήγηση:-

  1. Ο χώρος ονομάτων System.Collections εισάγεται, ώστε ο τύπος ArrayList να είναι διαθέσιμος στο πρόγραμμα.
  2. Τρεις τιμές συμβολοσειράς προστίθενται στο ArrayList με τη μέθοδο Add.
  3. Ο βρόχος foreach διαβάζει κάθε στοιχείο ως αντικείμενο και η μέθοδος Console.WriteLine το εκτυπώνει σε μια νέα γραμμή.

Όταν εκτελείται το πρόγραμμα, εκτυπώνει Java, Pythonκαι Κοτλίν σε ξεχωριστές γραμμές. Ένας βρόχος for με την ιδιότητα Count θα έδινε το ίδιο αποτέλεσμα, επιτρέποντάς σας παράλληλα να χρησιμοποιήσετε τη θέση ευρετηρίου κάθε στοιχείου.

Μέθοδοι και Ιδιότητες C# ArrayList

Η κλάση ArrayList παρέχει πολλές ενσωματωμένες μεθόδους και ιδιότητες για τη διαχείριση των στοιχείων της. Πέρα από την προσθήκη και την αφαίρεση στοιχείων, μπορεί να ταξινομήσει, να αναζητήσει και να αντιστρέψει τη συλλογή. Τα πιο συνηθισμένα μέλη παρατίθενται παρακάτω.

Μέλος Περιγραφή
Πρόσθεση Προσθέτει ένα μόνο στοιχείο στο τέλος της ArrayList.
Κύριο θέμα Προσθέτει ένα στοιχείο σε μια συγκεκριμένη θέση ευρετηρίου.
ΑΦΑΙΡΕΣΗ Αφαιρεί την πρώτη εμφάνιση ενός συγκεκριμένου στοιχείου.
RemoveAt Αφαιρεί το στοιχείο στη δεδομένη θέση του δείκτη.
Καθαρισμός Αφαιρεί όλα τα στοιχεία από το ArrayList.
Είδος Ταξινομεί τα στοιχεία σε αύξουσα σειρά.
Reverse Reverses η σειρά των στοιχείων στη λίστα.
Περιέχει Επιστρέφει true εάν ένα δεδομένο στοιχείο υπάρχει στη λίστα.
Ευρετήριο Επιστρέφει τη θέση ευρετηρίου ενός δεδομένου στοιχείου.
Κόμης Ιδιότητα που επιστρέφει τον αριθμό των αποθηκευμένων στοιχείων.
Χωρητικότητα Ιδιότητα που επιστρέφει τον αριθμό των στοιχείων που μπορεί να περιέχει η λίστα.

Αυτά τα μέλη σάς επιτρέπουν να προσθέτετε, να βρίσκετε, να ταξινομείτε και να αφαιρείτε στοιχεία χωρίς να γράφετε μόνοι σας τη λογική, κάτι που είναι ένα από τα κύρια πλεονεκτήματα της χρήσης μιας συλλογής σε σχέση με έναν απλό πίνακα.

Διαφορά μεταξύ ArrayList και List σε C#

Τόσο ένα ArrayList όσο και ένα γενικό Λιστα αποθηκεύουν μια ομάδα στοιχείων που μπορούν να αναπτυχθούν κατά τον χρόνο εκτέλεσης, ωστόσο διαφέρουν στον τρόπο που χειρίζονται τους τύπους. Η γνώση της διαφοράς σάς βοηθά να επιλέξετε τον σωστό για τον σύγχρονο κώδικα C#.

Οι κύριες διαφορές παρατίθενται παρακάτω:

  • Ασφάλεια τύπου: Ένα ArrayList αποθηκεύει κάθε στοιχείο ως αντικείμενο, ενώ ένα List είναι συνδεδεμένο με έναν δηλωμένο τύπο και ελέγχεται κατά τη στιγμή της μεταγλώττισης.
  • Απόδοση: Ένα ArrayList τοποθετεί σε πλαίσιο και αποσυνδέει τύπους τιμών όπως ο int, κάτι που κοστίζει χρόνο, ενώ ένα List αποφεύγει την τοποθέτηση σε πλαίσιο για καλύτερη ταχύτητα.
  • Χώρος ονομάτων: Το ArrayList βρίσκεται στο System.Collections, ενώ το List βρίσκεται στο System.Collections.Generic.
  • χύτευση: Η ανάγνωση από ένα ArrayList συχνά απαιτεί μια μετατροπή στον αρχικό τύπο, αλλά ένα List επιστρέφει απευθείας τον σωστό τύπο.
  • Σύσταση: Microsoft Συνιστά τη Λίστα για νέα ανάπτυξη επειδή είναι ασφαλέστερη, ταχύτερη και πιο εύκολη στην ανάγνωση.

Εν ολίγοις, ένα ArrayList είναι χρήσιμο για την κατανόηση παλαιότερου κώδικα ή αποθήκευσης μικτού τύπου, ενώ μια Λίστα είναι η προτιμώμενη επιλογή για τις περισσότερες εφαρμογές σήμερα.

Συχνές Ερωτήσεις

Ένας πίνακας έχει σταθερό μέγεθος και αποθηκεύει ένα σύνολο τύπων δεδομένων κατά τη δήλωση. Ένα ArrayList μεγαλώνει και συρρικνώνεται κατά τον χρόνο εκτέλεσης και αποθηκεύει κάθε στοιχείο ως αντικείμενο, ώστε να μπορεί να περιέχει μικτούς τύπους δεδομένων σε μία μόνο λίστα.

Το ArrayList δεν καταργείται, αλλά Microsoft δεν το συνιστά για νέα ανάπτυξη. Η γενική κλάση List στο System.Collections.Generic προτιμάται επειδή προσθέτει ασφάλεια τύπων και καλύτερη απόδοση, επομένως ο περισσότερος σύγχρονος κώδικας C# χρησιμοποιεί List αντ' αυτού.

Επειδή ένα ArrayList αποθηκεύει στοιχεία ως αντικείμενα, η προσθήκη ενός τύπου τιμής όπως int το τυλίγει σε ένα αντικείμενο, το οποίο είναι boxing. Η ανάγνωσή του και η μετατροπή του στον αρχικό τύπο είναι unboxing. Και τα δύο βήματα κοστίζουν απόδοση, κάτι που το List αποφεύγει.

Ένα ArrayList υποστηρίζει πολλούς αναγνώστες ταυτόχρονα, αλλά τα μέλη της στιγμιαίας λειτουργίας δεν είναι εγγυημένα ασφαλή για τα νήματα όταν τροποποιείται η συλλογή. Για ασφαλείς πολυνηματικές εγγραφές, τυλίξτε το με το ArrayList.Syncχρονισμένη μέθοδο ή χρησιμοποιήστε μια ταυτόχρονη συλλογή αντ' αυτού.

Το Count είναι ο αριθμός των στοιχείων που είναι αποθηκευμένα αυτήν τη στιγμή στο ArrayList. Η χωρητικότητα είναι ο συνολικός αριθμός στοιχείων που μπορεί να χωρέσει πριν αλλάξει μέγεθος. Η χωρητικότητα είναι πάντα ίση ή μεγαλύτερη από το Count και αυξάνεται αυτόματα καθώς προσθέτετε στοιχεία.

Μπορείτε να αντιγράψετε τα στοιχεία σε μια Λίστα με ισχυρούς τύπους με τις μεθόδους Cast και ToList ή να καλέσετε τη μέθοδο ToArray για να λάβετε έναν πίνακα αντικειμένων. Η μετατροπή σε μια γενική Λίστα είναι συνηθισμένη επειδή αποκαθιστά την ασφάλεια των τύπων.

Ναι. Το GitHub Copilot μπορεί να γράψει δηλώσεις ArrayList, να προσθέσει και να αφαιρέσει κλήσεις και να επαναλάβει από ένα σύντομο σχόλιο ή όνομα μεθόδου. Συχνά προτείνει και τη γενική έκδοση List, καθώς αυτή είναι η συνιστώμενη συλλογή για νέο κώδικα C#.

Το ML.NET συνήθως διαβάζει δεδομένα εκπαίδευσης μέσω γενικών συλλογών όπως οι List και IEnumerable, οι οποίες αντιστοιχίζονται στον αγωγό IDataView. Ένα μη γενικό ArrayList σπάνια χρησιμοποιείται απευθείας, επειδή μια συλλογή με ισχυρή τυποποίηση διατηρεί τα δεδομένα μηχανικής μάθησης σαφή και ασφαλή ως προς τους τύπους.

Συνοψίστε αυτήν την ανάρτηση με: