C# Array Tutorial: Δημιουργία, Δήλωση, Εκκίνηση

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

Οι πίνακες C# αποθηκεύουν μια συλλογή στοιχείων σταθερού μεγέθους που μοιράζονται τον ίδιο τύπο δεδομένων κάτω από ένα όνομα μεταβλητής. Κάθε στοιχείο βρίσκεται σε έναν δείκτη που βασίζεται στο μηδέν, επομένως η δήλωση, η αρχικοποίηση και η πρόσβαση σε τιμές παραμένει γρήγορη και προβλέψιμη.

  • 📌 Ορισμός: Ένας πίνακας περιέχει πολλαπλές τιμές ενός τύπου σε θέσεις με δείκτη, οι οποίες επιτυγχάνονται μέσω μίας μόνο μεταβλητής.
  • Δήλωση: Ένας τύπος δεδομένων ακολουθούμενος από αγκύλες και ένα όνομα δηλώνει έναν πίνακα, για παράδειγμα τιμές Int32[].
  • 🔢 Αρχικοποίηση: Η νέα λέξη-κλειδί ορίζει το μέγεθος και, στη συνέχεια, κάθε δείκτης λαμβάνει μια τιμή όπως τιμές[0]=1.
  • 🔍 Πρόσβαση: Η μηδενική ευρετηρίαση διαβάζει ή γράφει οποιοδήποτε στοιχείο, επομένως το πρώτο στοιχείο είναι values[0] και η μέτρηση ξεκινά από το 0.
  • 🔁 Επανάληψη: Ένας βρόχος foreach περνάει από κάθε στοιχείο χωρίς δείκτη, γεγονός που αποφεύγει τα λάθη εκτός εύρους σε μεγαλύτερους πίνακες.
  • 🤖 Βοήθεια AI: Το GitHub Copilot δημιουργεί τυποποιημένους πίνακες, ενώ το ML.NET φορτώνει αριθμητικούς πίνακες ως χαρακτηριστικά για μοντέλα μηχανικής μάθησης.

Πίνακες C#

Τι είναι ένας πίνακας στο C#;

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

Έτσι, για παράδειγμα, εάν είχατε έναν πίνακα με τιμές ακέραιου αριθμού, ο πίνακας θα μπορούσε να είναι μια συλλογή τιμών όπως [1, 2, 3, 4]. Εδώ ο αριθμός των στοιχείων στον πίνακα είναι 4.

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

Αυτή η μεταβλητή θα δείχνει έναν πίνακα ή μια λίστα στοιχείων, τα οποία θα είναι υπεύθυνα για την αποθήκευση των στοιχείων του πίνακα.

Ας δούμε πώς μπορούμε να δουλέψουμε με πίνακες στη C#. Στο παράδειγμά μας, θα δηλώσουμε έναν πίνακα ακεραίων και θα εργαστούμε με αυτούς ανάλογα.

Σημειώστε ότι όλος ο παρακάτω κώδικας γίνεται στο αρχείο Program.cs.

Βήμα 1) Δήλωση πίνακα – Το πρώτο βήμα είναι να δηλώσετε έναν πίνακα. Ας δούμε πώς μπορούμε να το πετύχουμε αυτό με το παρακάτω παράδειγμα κώδικα.

Πίνακες σε C#

Code Εξήγηση:-

  1. Το πρώτο μέρος είναι το Τύπος δεδομένων. Καθορίζει τον τύπο των στοιχείων που χρησιμοποιούνται στον πίνακα. Έτσι, στην περίπτωσή μας, δημιουργούμε έναν πίνακα ακεραίων.
  2. Το δεύτερο μέρος [ ], το οποίο καθορίζει την κατάταξη του πίνακα. (Η κατάταξη είναι ένα σύμβολο κράτησης θέσης που καθορίζει τον αριθμό των στοιχείων που θα περιέχει ο πίνακας)
  3. Ακολουθεί το Όνομα του πίνακα που στην περίπτωσή μας είναι 'τιμές'. Σημειώστε ότι βλέπετε μια πράσινη υπογράμμιση, μην ανησυχείτε για αυτό. Αυτό είναι απλώς το .Net που λέει ότι έχετε δηλώσει έναν πίνακα, αλλά δεν τον χρησιμοποιείτε πουθενά.

Βήμα 2) Το επόμενο βήμα είναι η προετοιμασία του πίνακα. Εδώ πρόκειται να καθορίσουμε τον αριθμό των τιμών που θα κρατήσει ο πίνακας. Θα εκχωρήσουμε επίσης τιμές σε κάθε στοιχείο του πίνακα.

Πίνακες σε C#

Code Εξήγηση:-

  1. Αρχικά, ορίζουμε τον αριθμό των στοιχείων που θα περιέχει ο πίνακας σε 3. Έτσι, στις αγκύλες, λέμε ότι ο πίνακας θα περιέχει 3 στοιχεία.
  2. Στη συνέχεια, αντιστοιχίζουμε τιμές σε κάθε στοιχείο του πίνακα. Μπορούμε να το κάνουμε αυτό καθορίζοντας το όνομα της μεταβλητής + τη θέση του δείκτη στον πίνακα. Έτσι, η συνάρτηση values[0] σημαίνει ότι αποθηκεύουμε μια τιμή στην πρώτη θέση του πίνακα. Ομοίως, για να έχουμε πρόσβαση στη δεύτερη θέση, χρησιμοποιούμε τη συμβολισμό values[1] και ούτω καθεξής.

Σημείωση: – Στους Πίνακες, η θέση ευρετηρίου ξεκινά από το 0.

Βήμα 3) Ας εμφανίσουμε τώρα τα μεμονωμένα στοιχεία του πίνακα στην Κονσόλα. Ας προσθέσουμε τον παρακάτω κώδικα για να το πετύχουμε αυτό.

Πίνακες σε C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args) 
  {
   Int32[] value;
   value=new Int32[3];
   
   value[0]=1;
   value[1]=2;
   value[2]=3;
   
   Console.WriteLine(value[0]);
   Console.WriteLine(value[1]);
   Console.WriteLine(value[2]);
    
   Console.ReadKey(); 
  }
 }
}

Code Εξήγηση:-

Αυτό είναι το απλό μέρος όπου χρησιμοποιούμε απλώς τη μέθοδο Console.WriteLine για να στείλουμε κάθε τιμή του στοιχείου στην κονσόλα.

Σημειώστε ότι και πάλι, έχουμε πρόσβαση σε κάθε στοιχείο με τη βοήθεια του ονόματος της μεταβλητής του πίνακα μαζί με τη θέση του ευρετηρίου.

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

Παραγωγή:

Πίνακες σε C#

Από την έξοδο, μπορείτε να δείτε όλες τις τιμές του πίνακα που εμφανίζονται στην Κονσόλα.

Πώς να κάνετε επανάληψη σε έναν πίνακα C# χρησιμοποιώντας το foreach

Η ανάγνωση κάθε στοιχείου με βάση τον δείκτη του λειτουργεί, αλλά γίνεται κουραστική όταν ένας πίνακας περιέχει πολλές τιμές. Ο βρόχος foreach προσφέρει έναν πιο καθαρό τρόπο για να επισκεφθείτε κάθε στοιχείο ενός πίνακα με τη σειρά χωρίς tracΡυθμίστε μόνοι σας μια μεταβλητή δείκτη.

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

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Int32[] values = new Int32[3] {1, 2, 3};
   foreach (Int32 item in values)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Το παραπάνω παράδειγμα δηλώνει και αρχικοποιεί έναν πίνακα τριών ακεραίων αριθμών και στη συνέχεια τον διατρέχει με το foreach. Σε κάθε πέρασμα η μεταβλητή είδος λαμβάνει την επόμενη τιμή και η Console.WriteLine την εκτυπώνει. Η έξοδος είναι οι αριθμοί 1, 2 και 3 σε ξεχωριστές γραμμές.

Βασικά σημεία που πρέπει να θυμάστε σχετικά με το foreach με πίνακες:

  • Η μεταβλητή βρόχου είναι μόνο για ανάγνωση, επομένως το foreach είναι καλύτερο για την ανάγνωση τιμών αντί να τις αλλάζει στη θέση τους.
  • Για να τροποποιήσετε στοιχεία ενώ κοιτάτεping, χρησιμοποιήστε έναν βρόχο for με ένα ευρετήριο αντ' αυτού.
  • Το foreach λειτουργεί με μονοδιάστατους πίνακες, πολυδιάστατους πίνακες και οποιαδήποτε συλλογή που υποστηρίζει επανάληψη.

Πολυδιάστατοι πίνακες C#

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

Δηλώνετε έναν δισδιάστατο πίνακα τοποθετώντας ένα κόμμα μέσα στις αγκύλες. Κάθε επιπλέον κόμμα προσθέτει μια άλλη διάσταση, επομένως το int[,] είναι δισδιάστατο και το int[,,] είναι τρισδιάστατο. Στη συνέχεια, τα στοιχεία προσεγγίζονται με έναν δείκτη ανά διάσταση.

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[,] matrix = new int[2, 2] { {1, 2}, {3, 4} };
   Console.WriteLine(matrix[0, 0]);
   Console.WriteLine(matrix[1, 1]);
   Console.ReadKey();
  }
 }
}

Εδώ, ο πίνακας πίνακα περιέχει δύο γραμμές και δύο στήλες. Το στοιχείο matrix[0, 0] επιστρέφει 1 και το matrix[1, 1] επιστρέφει 4. Ο αριθμός των διαστάσεων είναι σταθερός όταν δηλώνεται ο πίνακας, ενώ το μέγεθος κάθε διάστασης ορίζεται όταν δημιουργείται ο πίνακας.

C# Jagged Arrays

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

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

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[][] jagged = new int[2][];
   jagged[0] = new int[] {1, 2, 3};
   jagged[1] = new int[] {4, 5};
   Console.WriteLine(jagged[0][2]);
   Console.WriteLine(jagged[1][1]);
   Console.ReadKey();
  }
 }
}

Η έκφραση jagged[0][2] διαβάζει το τρίτο στοιχείο της πρώτης γραμμής, το οποίο είναι το 3, και η jagged[1][1] διαβάζει το δεύτερο στοιχείο της δεύτερης γραμμής, το οποίο είναι το 5. Επειδή κάθε γραμμή είναι ένας ξεχωριστός πίνακας, οι jagged πίνακες χρησιμοποιούν αποτελεσματικά τη μνήμη όταν τα μήκη των γραμμών ποικίλλουν, αν και χρειάζονται ένα επιπλέον βήμα για την αρχικοποίηση κάθε εσωτερικού πίνακα.

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

Η ιδιότητα Length επιστρέφει τον συνολικό αριθμό στοιχείων σε έναν πίνακα C#. Για παράδειγμα, η ιδιότητα values.Length δίνει 3 για έναν πίνακα τριών στοιχείων. Για πολυδιάστατους πίνακες, η ιδιότητα GetLength(dimension) επιστρέφει το μέγεθος κάθε συγκεκριμένης διάστασης.

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

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

Η στατική μέθοδος Array.Sort ταξινομεί τα στοιχεία ενός πίνακα C# σε αύξουσα σειρά. Μεταβιβάστε τον πίνακα στην Array.Sort(values) και χρησιμοποιήστε τον Array.Reverse στη συνέχεια για φθίνουσα σειρά. Η ταξινόμηση λειτουργεί σε αριθμούς, συμβολοσειρές και άλλους συγκρίσιμους τύπους.

Η μέθοδος Array.Copy αντιγράφει μια περιοχή στοιχείων από έναν πίνακα σε έναν άλλο, ενώ η μέθοδος Clone δημιουργεί ένα ρηχό αντίγραφο ολόκληρου του πίνακα. Η αντιστοίχιση μιας μεταβλητής πίνακα σε μια άλλη αντιγράφει μόνο την αναφορά, όχι τα υποκείμενα στοιχεία.

Μια IndexOutOfRangeException παρουσιάζεται όταν ο κώδικας αποκτά πρόσβαση σε μια θέση πίνακα που δεν υπάρχει, όπως values[5] σε έναν πίνακα τριών στοιχείων. Επειδή οι πίνακες C# βασίζονται στο μηδέν, τα έγκυρα ευρετήρια εκτελούνται από 0 έως Length μείον ένα. Να επικυρώνετε πάντα πρώτα ένα ευρετήριο.

Ναι. Το GitHub Copilot προτείνει δηλώσεις πινάκων, αρχικοποίηση και λογική βρόχου από ένα σχόλιο ή όνομα μεθόδου μέσα στο Visual Studio και VS Code. RevΔείτε κάθε πρόταση για σωστό μέγεθος και όρια δεικτών, καθώς το Copilot μπορεί να εισαγάγει σφάλματα εκτός εύρους και σφάλματα εκτός εύρους.

Το ML.NET αναπαριστά διανύσματα χαρακτηριστικών και εισόδους μοντέλων ως πίνακες C#, συνήθως πίνακες float[]. Τα δεδομένα εκπαίδευσης φορτώνονται σε πίνακες ή spans και οι προβλέψεις επιστρέφουν πίνακες βαθμολογιών. Το σταθερό μέγεθος και η γρήγορη δημιουργία ευρετηρίου των πινάκων τους καθιστούν αποτελεσματικούς για αγωγούς μηχανικής μάθησης.

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