Πίνακες, Αrrays

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

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Πίνακες, Αrrays

Δημοσίευση από spookyb52 » 02 Απρ 2006 12:14

Το βοήθημα αυτό υπήρχε στο greekflasher αλλά επειδή είναι αρκετά σημαντικό είπα να το βάλω και εδώ.

Αυτή είναι η πρώτη έκδοση κάποια στιγμή θα γίνει ένα update

Οι πίνακες είναι αντικείμενα στα οποία μπορούμε να αποθηκεύσουμε τιμές. Τα στοιχεία σε ένα πίνακα είναι αριθμημένα, ξεκινώντας από το 0

Παρακάτω είναι ένας τρόπος σύνταξης και προσπέλασης σε στοιχεία πινάκων

Κώδικας: Επιλογή όλων

pinakas = [];
pinakas[0] = "text";
pinakas[1] = variable;
pinakas[2] = 25;

Αναλυτικά :
pinakas = [];
Δημιουργούμε ένα νέο πίνακα με την ονομασία pinakas
Εναλλακτικά μπορούμε να γράψουμε

Κώδικας: Επιλογή όλων

pinakas =  new Array()

-------------------------------
pinakas[0] = "text";
pinakas[1] = variable;
pinakas[2] = 25;
Ο πίνακας αυτός περιέχει τρία στοιχεία

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

Άν θέλουμε να προσπελάσουμε την τιμή κάποιου πίνακα γράφουμε το όνομα και μετά μέσα σε παρένθεση την θέση του
pinakas[0]
pinakas[1]
pinakas[2]
.
..
...
pinakas[n]
πχ στο αρχικό παράδειγμα

δοκιμάστε με την εντολή trace() να δείτε στο output παράθυρο του flash κάθε τιμή

πχ για την πρώτη τιμή

Κώδικας: Επιλογή όλων

pinakas = [];
pinakas[0] = "text";
pinakas[1] = variable;
pinakas[2] = 25;
trace(pinakas[0]);
Στην δεύτερη τιμή pinakas[1] θα βγεί undefined επειδή είναι μεταβλητή στην οποία όμως δέν έχουμε δώσει κάποια τιμή

Δοκιμάστε το παρακάτω

Κώδικας: Επιλογή όλων

variable = 125
pinakas = [];
pinakas[0] = "text";
pinakas[1] = variable;
pinakas[2] = 25;
trace(pinakas[1]);
Θα βγεί η τιμή 125 γιατί αυτή την τιμή δώσαμε αρχικα στην μεταβλητή με όνομα variable

για να δείτε σε σειρά τις τιμές του πίνακα στο ouput παράθυρο με την χρήση της trace μπορείτε να γράψετε και απευθείας

Κώδικας: Επιλογή όλων

trace(pinakas)



Ένας δεύτερός τρόπος σύνταξης σε ένα πίνακα είναι ο επόμενος

Κώδικας: Επιλογή όλων

pinakas = new Array("text", variable, 25);
οι παραπάνω τιμές είναι προσπελάσιμες όπως και πρίν, ξεκινούν από το 0 και φτάνουν στο 2 (0, 1, 2)

έτσι η πρώτη τιμή : "text" είναι η pinakas[0]
η δεύτερη : variable είναι η pinakas[1] κτλ.


Ο τρόπος σύνταξης που χρησιμοποιώ προσωπικά (και με βάση τον οποίο θα περιγράψω και τα υπόλοιπα) είναι ο επόμενος

Κώδικας: Επιλογή όλων

pinakas = ["text", variable, 25];
και εδώ ισχύει ότι και πρίν


------------------------------------------------------------------------


ένας πίνακας μπορεί να περιέχει όχι μόνο αριθμητικές τιμές, κείμενο και μεταβλητές αλλά και πίνακες

πχ

Κώδικας: Επιλογή όλων

pinakas = [[12, 24, 33], ["olonos", variable], 55];
Βλέπουμε ότι στο παραπάνω έχουμε ένα πίνακα με τρείς θέσεις

αλλά στις 2 πρώτες (0 και 1) έχουμε 2 πίνακες αντί για κάποια τιμή όπως στην τρίτη θέση

Το θέμα είναι πώς γίνεται να προσπελάσουμε αυτές τις τιμές

Η σύνταξη είναι η παρακάτω

pinakas[x][x] όπου χ το νούμερο της θέσης που μας ενδιαφέρει

Πχ η τιμή 24 στο παραπάνω παράδειγμα βρίσκεται στην πρώτη θέση του κεντρικού πίνακα άρα έχουμε pinakas[0] και στην δεύτερη θέση του εσωτερικού πίνακα άρα pinakas[0][1]

Στο παραπάνω παράδειγμα : pinakas = [[12, 24, 33], ["olonos", variable], 55]; έχουμε αναλυτικά

Κώδικας: Επιλογή όλων

pinakas[0][0] = 12
pinakas[0][1] = 24
pinakas[0][2] = 33

pinakas[1][0] = "olonos"
pinakas[1][1] = variable

pinakas[2] = 55

Παρακάτω θα παρουσιαστούν οι περισσότερες από τις ιδιότητες των πινάκων (11 από τις συνολικά 13)




Array.concat() ενώνει τα στοιχεία 2 η περισσότερων πινάκων

πχ δοκιμάστε το παρακάτω

Κώδικας: Επιλογή όλων

arithmoi = [1453, 1821, 1908];
lekseis = ["margarita", "b52", "tool"];
newArray = arithmoi.concat(lekseis);

trace(newArray);
Δημιουργήσαμε ένα νέο πίνακα με την ονομασία newArray τα στοιχεία του οποίου είναι η ένωση των στοιχείων των 2 προηγούμενων πινάκων

Άν θέλαμε να ενώσουμε 3 πίνακες τότε θα γράφαμε

Κώδικας: Επιλογή όλων

newPinakas = Array.concat(array1, array2)
η για περισσότερους ν πίνακες

newPinakas = Array.concat(array1, array2, ...arrayN)

Σε εσωτερικούς πίνακες (nested arrays) τα στοιχεία δέν σπάνε σε χωριστά τμήματα

πχ

Κώδικας: Επιλογή όλων

arithmoi = [[1453, 1821], 1908];
lekseis = ["margarita", "tool"];
newArray = arithmoi.concat(lekseis);
Παρατηρήστε ότι ο πίνακας με την ονομασία αριθμοί έχει τώρα ένα εσωτερικό πίνακα

Ο νέος πίνακας που θα δημιουργηθεί είναι ό

Κώδικας: Επιλογή όλων

newArray = [[1453, 1821], 1908, "margarita", "tool"];



Array.toString() Επιστρέφει μια string τιμή που αντιπροσωπεύει τα στοιχεία του πίνακα χωρισμένα με κόμμα

πχ δοκιμάστε το παρακάτω

Κώδικας: Επιλογή όλων

createTextField("keimeno", 1, 111, 111, 111, 22);
pao = "1908";

panatha = [pao, " 1971"];
keimeno.text = panatha.toString();


Array.join() ενώνει τα στοιχεία του πίνακα
πχ

Κώδικας: Επιλογή όλων

groups = ["Pearl Jam", "Soundgarden", "Tool"];
groups.join();
θα επέστρεφε Pearl Jam,Soundgarden,Tool χωρισμένα με κόμμα. Αντί για αυτό θα μπορούσαμε να χρησιμοποιούσαμε seperator

πχ

Κώδικας: Επιλογή όλων

groups = ["Pearl Jam", "Soundgarden", "Tool"];
groups.join(" + ");
θα επέστρεφε Pearl Jam + Soundgarden + Tool χωρισμένα με +



Array.length επιστρέφει τον αριθμό των στοιχείων σε ένα πίνακα

πχ

Κώδικας: Επιλογή όλων

pinakas = [];
variable = pinakas.length;
Το variable παίρνει την τιμή 0

Κώδικας: Επιλογή όλων

pinakas = [start, 1, 2, end];
variable = pinakas.length;
Το variable παίρνει την τιμή 4 όσα και τα στοιχεία του πίνακα

ακόμα έχουμε

Κώδικας: Επιλογή όλων

pinakas = [];
pinakas[8] = 22;
variable = pinakas.length;
Η μεταβλητή με ονομασία variable παίρνει την τιμή 9 (μήν ξεχνάτε ότι η αρίθμηση αρχίζει από το 0 pinakas[0]) αλλά με εξαίρεση την 9η τιμη του pinakas[8] που είναι 22 όλες οι άλλες είναι undefined



Array.reverse() αντιστρέφει τα στοιχεία σε ένα πίνακα

πχ

Κώδικας: Επιλογή όλων

myArray = [1, 2, 3, 4, 5, 6];
myArray.reverse();
ο πίνακας τώρα θα είναι
myArray = [6, 5, 4, 3, 2, 1];
Ακόμα με τα όσα είδαμε πιό πάνω μπορούμε να έχουμε

Κώδικας: Επιλογή όλων

pinakas = [11, 22];
pinakas1 = [33, 44];
newArray = pinakas.concat(pinakas1.reverse());
ο νέος πίνακας θα είναι ο

newArray = [11, 22, 44, 33] προσέξτε ότι τα στοιχεία του pinakas1 έχουν αναστραφεί στον νέο πίνακα



Array.pop()

Αφαιρεί το τελευταίο στοιχείο από ένα πίνακα και επιστρέφει την τιμή του

πχ

Κώδικας: Επιλογή όλων

pinakas = [11, 22, 33];
timh = pinakas.pop();
η timh θα είχε αξία 33 όσο και η τελευταία τιμή του πίνακα

πχ

Κώδικας: Επιλογή όλων

myboard = [11, 22, 33, 44];
myboard.pop();
ο νέος πίνακας είναι τώρα πιά myboard = [11, 22, 33];

η ακόμα

Κώδικας: Επιλογή όλων

myboard = [11, 22, 33, 44];
myboard.pop();
myboard.pop();
ο νέος πίνακας είναι τώρα myboard = [11, 22];



Array.shift()

Το ακριβώς αντίθετο από την pop κάνει η shift. Αφαιρεί το πρώτο στοιχείο από ένα πίνακα και επιστρέφει την τιμή του

Κώδικας: Επιλογή όλων

pinakas = [11, 22, 33];
timh = pinakas.shift();
η timh θα είχε αξία 11 όσο και η πρώτη τιμή του πίνακα

πχ

Κώδικας: Επιλογή όλων

myboard = [11, 22, 33, 44];
myboard.shift();
ο νέος πίνακας είναι τώρα πιά myboard = [22, 33, 44];



Array.unshift()

Τοποθετεί στην αρχή του πίνακα τα νέα στοιχεία που υπάρχουν μέσα στην παρένθεση της unshift

πχ

Κώδικας: Επιλογή όλων

pinakas = [5, 6, 7];
pinakas.unshift(1, 2, 3, 4);
ο νέος πίνακας θα γίνει
pinakas = [1, 2, 3, 4, 5, 6, 7]


Array.push()

Τοποθετεί στο τέλος του πίνακα τα νέα στοιχεία που υπάρχουν μέσα στην παρένθεση της push

πχ

Κώδικας: Επιλογή όλων

pinakas = [1, 2, 3];
pinakas.push(4, 5, 6, 7);
ο νέος πίνακας θα γίνει
pinakas = [1, 2, 3, 4, 5, 6, 7]


Array.slice()

Συγκεκριμένα array.slice(start, end)

Επιλέγουμε από πού μέχρι πού θα πάρουμε τα στοιχεία από ένα πίνακα

πχ

Κώδικας: Επιλογή όλων

pinakas = [0, 1, 2, 3, 4, 5, 6, 7];
newArray = pinakas.slice(1, 4);
Ο νέος πινακας newArray θα έιναι ο
newArray = [1, 2, 3];
Άν δέ βάζαμε παράμετρους στην slice

πχ

Κώδικας: Επιλογή όλων

pinakas = [0, 1, 2, 3, 4, 5, 6, 7];
newArray = pinakas.slice();
θα δημιουργούσαμε ένα πίνακα με ονομασία newArray ακριβές αντίγραφο του pinakas. Δηλαδή
newArray = [0, 1, 2, 3, 4, 5, 6, 7];


Array.splice()

Κώδικας: Επιλογή όλων

pinakas = [0, 1, 2, 3, 4, 5, 6, 7];
pinakas.splice(3, 2, 33);
το παραπάνω θα επέστρεφε
pinakas = [0, 1, 2, 33, 5, 6, 7];
Τί κάνει λοιπόν η splice :
splice(value1, value2, value3)
value1 : το σημείο από το οποίο αρχίζει η διαγραφή των στοιχείων σε ένα πίνακα

value2 : το σημείο μέχρι το οποίο θα φτάσει η διαγραφή. Άν η τιμή είναι 0 κανένα στοιχείο δέ θα διαγραφεί. Άν η τιμή για την value1 ήταν 3 και για τη value2 ήταν 5 τότε η διαγραφή θα άρχιζε από το 4 έως και το 9 στοιχείο του πίνακα. Άν δεν δίναμε κάποια τιμή τότε θα διαγραφονταν όλα τα στοιχεία του πίνακα από την θέση value1 και μετα

Value3 : τα νέα στοιχεία που θα μπούνε στον πίνακα από την θέση value1 και μετά

Άν θέλαμε πχ στον παρακάτω πίνακα να βάλουμε μιά νέα τιμή στην 4 θέση και να διαγράψουμε όλες τις υπόλοιπες από εκεί και μετά θα γράφαμε :

Κώδικας: Επιλογή όλων

pinakas = ["dog", "cat", "bird", apple, pineaple, water_mellon];
pinakas.splice(3, pinakas.length, "kangaroo");
ο νέος πίνακας θα ήταν ο
pinakas = ["dog", "cat", "bird", "kangaroo"];
Τελευταία επεξεργασία από το μέλος spookyb52 την 19 Μαρ 2007 14:57, έχει επεξεργασθεί 2 φορές συνολικά.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πίνακες, Αrrays

Δημοσίευση από cpulse » 02 Απρ 2006 21:24

Σημείωσε επίσης ότι το ActionScript 2 είναι αρκετά κακοφτιαγμένο κι έχει ένα σωρό ιδιαιτερότητες και παραξενιές όπως πχ:

Τα arrays μπορούν να είναι παράλληλα και απλά arrays αλλά και associative arrays. Δηλαδή μπορείς να έχεις κάτι τέτοιο:
pinakas = new Array();
pinakas[0] = "text";
pinakas[1] = variable;
pinakas[2] = 25;
pinakas["ab"] = "cd";

Αλλά! το pinakas.length σου δίνει τον αριθμό μόνο των αριθμητικών keys! Στο παραπάνω παράδειγμα τα στοιχεία είναι 4 αλλά το pinakas.length θα δώσει 3.

Επίσης αν βάλεις αριθμητικό key παραπάνω από το length τότε το ActionScript σου συμπληρώνει αυτόματα τις ενδιάμεσες τιμές ως undefined:
pinakas = new Array();
pinakas[0] = "text";
pinakas[1] = variable;
pinakas[2] = 25;
pinakas[4] = 6789;

εδώ το ActionScript θα συμπληρώσει αυτόματα την τιμή:
pinakas[3] = undefined;

και μάλιστα αν κάνεις iterate μέσα στα στοιχεία του παραπάνω πίνακα αυτό που μπήκε αυτόματα θα είναι σαν να μην υπάρχει. Δηλαδη το
for (k in pinakas) trace(k + " = " + pinakas[k]);
δεν θα εμφανίσει το pinakas[3] = undefined; ... το pinakas.length όμως θα είναι 5 !

Για να δούμε το ActionScript 3 θα τα διορθώσει αυτα;

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Πίνακες, Αrrays

Δημοσίευση από spookyb52 » 02 Απρ 2006 21:52

ωραία παρέμβαση cpulse :D
Τελευταία επεξεργασία από το μέλος spookyb52 την 19 Μαρ 2007 14:51, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
Expl0it
Honorary Member
Δημοσιεύσεις: 2364
Εγγραφή: 25 Αύγ 2003 23:24
Τοποθεσία: home/sweet/home

Πίνακες, Αrrays

Δημοσίευση από Expl0it » 10 Απρ 2006 14:47

Εγώ προσπαθώ να καταλάβω που βρίσκεις την όρεξη να τα γράψεις όλα αυτά !
LET THE C0DER IN YOUR LIFE
Fatal Error: Unable to read 3555 bytes in /root/head/brain/task.php on line 0

Εικόνα

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Πίνακες, Αrrays

Δημοσίευση από spookyb52 » 11 Απρ 2006 03:05

Εγώ προσπαθώ να καταλάβω που χάθηκες :hammer: :D
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

Απάντηση

Επιστροφή στο “Flash γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης