Διαδρομές
/
Perl
Perl
/
Ύλη
/
Πίνακες και Λίστες
Πί

Πίνακες και Λίστες σε Perl

1 άσκηση

Σχετικά με την έννοια Πίνακες και Λίστες

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

Στις περισσότερες περιπτώσεις, οι λίστες περικλείονται σε παρενθέσεις () με τα στοιχεία τους χωρισμένα με κόμματα ,.

Μια μεταβλητή πίνακα συνήθως γεμίζει με την ανάθεση μιας λίστας σε αυτήν, π.χ. my @names = ('Alice', 'Bob', 'Charlie');.

Τα στοιχεία ενός πίνακα ή μιας λίστας μπορούν να προσπελαστούν καθορίζοντας θέσεις με αγκύλες, π.χ. ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.

Οι θέσεις στην Perl ξεκινούν από το 0. Οι αρνητικές θέσεις μετρούν από το τέλος του πίνακα ή της λίστας, π.χ. ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.

Συναρτήσεις

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

Στις συναρτήσεις για τον χειρισμό πινάκων περιλαμβάνονται η push για την προσθήκη στοιχείων στο τέλος, η pop για την αφαίρεση του τελευταίου στοιχείου, η shift για την αφαίρεση του πρώτου στοιχείου, η unshift για την προσθήκη στοιχείων στην αρχή, και η splice για πιο σύνθετες τροποποιήσεις.

Η επανάληψη πάνω σε πίνακες και λίστες με μια εντολή for(each) είναι επίσης κάτι που θα συναντήσεις συχνά.

Παραλλαγές των sigils

Όταν προσπελαύνεις τα στοιχεία ενός πίνακα, το εκάστοτε sigil καθορίζει το αποτέλεσμα. Οι αγκύλες [] στο τέλος του ονόματος της μεταβλητής είναι αυτό που λέει στην Perl ότι προσπελαύνεις έναν πίνακα με αυτό το όνομα.

my @names = ('Alice', 'Bob', 'Charlie');

$names[0]; # 'Alice'      <- A scalar
@names[0]; # ('Alice')    <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice

$names[1, 2]; # 'Charlie'                <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie')       <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice

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

Πίνακες έναντι λιστών

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

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

my @names = ('Alice', 'Bob', 'Charlie');

scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).

Διάβασε περισσότερα στις παρακάτω συχνές ερωτήσεις: Ποια είναι η διαφορά μεταξύ λίστας και πίνακα;

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Πίνακες και Λίστες

Η εξάσκηση είναι κλειδωμένη

Ξεκλείδωσε 10 ακόμη ασκήσεις για να εξασκηθείς στην έννοια Πίνακες και Λίστες