[eeei.gr Logo]
Επικοινωνία
Ταυτότητα
Μαθήματα Internet | Μαθήματα Προγραμματισμού | Net Business | Τα νέα του Internet | Ο Κόσμος του Αύριο

Μεταβλητές Hash

Όταν μιλήσαμε για arrays (λίστες) είδαμε ότι οι τιμές κάθε λίστας είναι δομημένες με μια συγκεκριμένη σειρά, π.χ. (75, 'gepiti', 356/2). Οι hashes (γνωστές και ως associative arrays) θα μπορούσαν να θεωρηθούν και αυτές ως λίστας, αλλά χωρίς συγκεκριμένη θέση κάθε τιμής. Στην hash δεν υπάρχει πρώτος, δεύτερος, τελευταίος κ.λπ. Αντί γι' αυτό κάθε τιμή (value) έχει το δικό της κλειδί (key), δηλαδή τη δική της ετικέτα που τη χαρακτηρίζει.

Για παράδειγμα, η ακόλουθη hash χρησιμοποιείται για να καταχωρηθεί το ύψος και το βάρος μου:

my %info = (height => 185, weight => 87);

Το ίδιο αποτέλεσμα θα μας δώσει και η:

my %info = ('height' , 185 , 'weight' , 87);

(Οι τιμές πρέπει να είναι ζυγές διαφορετικά η τελευταία αγνοείται.)

Κάθε όνομα hash ξεκινάει με τον χαρακτήρα % και αφού δεν υπάρχει αρχή και τέλος δεν έχουμε λειτουργίες όπως οι shift, unshift, pop, push που μάθαμε στις arrays.

Για να προσθέσουμε μια τιμή δηλώνουμε απλώς:

$info{hair} = 'dark';

Για να πάρουμε μόνο τα ονόματα όλων των ετικετών μιας hash δηλώνουμε:

my @keys = keys(%info);

Ενώ για να έχουμε όλες τις τιμές δηλώνουμε:

my @values = values(%info);

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

Για να δούμε τον αριθμό των στοιχείων μιας hash θα χρησιμοποιήσουμε την keys:

my %info = (height => 185, weight => 87, age => 36);

my $number_of_elements = keys %info;

print "Arithmos stoixeion = $number_of_elements\n";

Η εκτύπωση μας δίνει:

Arithmos stoixeion = 3

Για να λάβουμε τμήματα μιας hash χρησιμοποιούμε την ακόλουθη σύνταξη:

my @a_piece_of_info = @info{'height', 'hair'};

Ενώ για να διαγράψουμε ένα στοιχείο της hash:

delete $info{weight};

Με τον ίδιο τρόπο γίνεται και η αλλαγή τιμής:

$info{height} = 187;

και η τιμή από 185 γίνεται 187.

Αν θέλουμε να μεταφέρουμε ένα στοιχείο από μια hash σε μια άλλη (διαγράφεται από εκεί που βρίσκεται και προστίθεται στην άλλη) θα δηλώσουμε:

$new_hash{key} = delete $old_hash{key};

Για παράδειγμα:

my %info = ('height' , 185 , 'weight' , 87);

my %info2 = ('age' , 36 , 'income' , 87000);

$info2{height} = delete $info{height};

print %info;

print "\n";

print %info2;

Η εκτύπωση μας δίνει:

weight87

height185income87000age36

Για να διαχειριστούμε ένα ένα όλα τα στοιχεία μιας hash θα χρησιμοποιήσουμε τη λειτουργία foreach. Για παράδειγμα:

my %info = (height => 185, weight => 87, age => 36);

foreach my $element (keys %info)

{

print "The $element is $info{$element}\n";

}

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

Η εκτύπωση θα δώσει:

The height is 185

The weight is 87

The age is 36

Με τη foreach (for) μπορούμε και να διαγράψουμε όλα τα περιεχόμενα μιας hash. Απλούστερος και ταχύτερος τρόπος όμως είναι να δηλώσουμε:

%hash_name = ();


Τρέχουσα Ενότητα: Perl


 

Φιλικά - συνεργαζόμενα sites: Left Handed Products


© Eeei.gr 2009