חתיכת מערכים

לעתים נרצה ליצור מערך חדש המבוסס על תת קבוצה של איברים ממערך אחר. כדי לעשות זאת נשתמש באפשרות לחתוך מערך. החתך מוגדר על ידי קבוצת מספרים שלמים, המציינים את האינדקסים אותה אנו רוצים לקחת מהמערך.



לדוגמא:

use strict;
use warnings;

my @stuff = qw/everybody wants a rock/;
my @rock  = @stuff[1 .. $#stuff];      # @rock is qw/wants a rock/
my @want  = @stuff[ 0 .. 1];           # @want is qw/everybody wants/
@rock     = @stuff[0, $#stuff];        # @rock is qw/everybody rock/

כאשר השתמשנו באופרטור .. הגדרנו תחום במערך אותו אנו רוצים לחתוך. בעזרת פסיקים בחרנו איברים ספציפיים בהם אנו מעוניינים.

פונקציות

Perl מספקת פונקציות הפועלות על מערכים. נציג כעת כמה מהן.

מערך כמחסנית

ניתן לחשוב על מחסנית כעל מערך בגודל לא חסום. צורת חשיבה זו גרמה להוספת שתי פונקציות

ל-Perl - pop ו-push, לשליפת והוספת איברים מהמערך.

הנה דוגמא לשימוש בפונקציות אלו:

use strict;
use warnings;

my @stack;
push(@stack, 7, 6, "go");   # @stack is now qw/7 6 go/
my $action = pop @stack;    # $action is "go", @stack is (7, 6)
my $value = pop(@stack) +
            pop(@stack);    # value is 6 + 7 = 13, @stack is empty



מערך כתור

ניתן לממש גם תור בעזרת מערך. נעשה זאת בצורה הבאה:

נשתמש בפונקציות unshift ו-pop, כאשר הפונקציה unshift משמשת כ-enqueue והפונקציה pop משמשת כ-dequeue.

דוגמא:

use strict;
use warnings;

my @queue;
unshift (@queue, "Customer 1"); # @queue is now ("Customer 1")
unshift (@queue, "Customer 2");
            # @queue is now ("Customer 2" "Customer 1")
unshift (@queue, "Customer 3");
            # @queue is now ("Customer 3" "Customer 2" "Customer 1")

my $item = pop(@queue);
            # @queue is now ("Customer 3" "Customer 2")
print "Servicing $item\n";     # prints:  Servicing Customer 1\n
$item = pop(@queue);           # @queue is now ("Customer 3")
print "Servicing $item\n";     # prints:  Servicing Customer 2\n

אם זאת, יש להזהר מהשימוש בפונקציה unshift במובן של תור. הדוגמא לעיל נכונה מכיוון ש-unshift כל פעם הוסיפה איבר בתחילת המערך, ו-pop הוציאה איבר מסופו. אולם יש לזכור תכונה של unshift והיא שפונקציה זו מכניסה איברים למערך בסדר בה הם נכתבים, דבר הנוגד את אופי התור.

נביט בדוגמא הבאה:

use strict;
use warnings;

my @notAqueue;
unshift(@notAqueue, "Customer 0", "Customer 1");
# @queue is now ("Customer 0", "Customer 1")

unshift (@notAqueue, "Customer 2");
# @queue is now ("Customer 2", "Customer 0", "Customer 1")

התוצאה כאשר אנו משתמשים ב-unshift עם יותר מפרמטר אחד איננה תור. לכן - יש להזהר כאשר משתמשים בה למימוש תור.



מאת: עודד

אופרטורים

עמוד 12!!!
מאת: עודד

אופרטורים

אין טבלת אופרטורים בעמוד!!!
מאת: MoShiKy

טעויות כתיב

אם יש לך זמן כדאי שתתקן את השגיאות הבאות במסמך:
עמ' 20- "אם זאת" => "עם זאת"
עמ' 21- "אל הרשימ" => "אל הרשימה"

EOC
שיתוף:
| עוד