logo


פרק 10: ניהול רשימות והאשים (Hashs)

רשימה של האשים

אם מוחכם עדיין לא התפוצץ, חשבו כעת על רשימה שבה כל פריט הוא טבלת האש. מי יעשה דבר כזה? ובכן, סוכן מכוניות משומשות לדוגמא, ולא רק בגלל הסיבוך שבדבר. דמיינו לעצמכם רשימה של מכוניות משומשות למכירה. לכל מכונית רשימת תכונות כגון היצרן, מודל, השנה, הצבע, הקילומטרז' והמחיר. תכונות אלו מתאימות בדיוק למודל ה"זוגות מפתח-ערך" (האש). כך שאנו יכולים להכניס כל רכב העומד למכירה לתוך האש, ולאחר מכן לצרף את כל המכוניות העומדות למכירה לרשימה.

@carsforsale=({"make"=>"Toyota",
"model"=>"Avalon",
"year"=>"1998",
"color"=>"black",
"mileage"=>"23000",
"price"=>"13500"}); 

בהתחלה, נייצר רשימה של carforsale עם פריט אחד. הפריט הזה היינו האש, המוגדר היטב בתוך הסוגריים המסולסלות, עם כל הזוגות הרלוונטיים של מפתח-ערך. אנו יכולים לשלוף כל אחד מהערכים הללו, כגון היצרן של המכונית הראשונה ברשימה (טויוטה):

$carsforsale[0]{"make"}

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

%temp=("make"=>"Nissan",
"model"=>"Maxima",
"year"=>"2000",
"color"=>"green",
"mileage"=>"5520",
"price"=>"18750"); 

push(@carsforsale,{%temp});

אינכם חייבים להשתמש בהאש זמני כמתווך, אולם זה הופך את הקוד לקריא ומובן הרבה יותר (במונחים יחסיים, כמובן). עתה, מה אנו יכולים לעשות עם רשימת האשים כזו? רעיון אחד הוא פשוט להדפיס אותה...משמע, לעשות קטלוג של המכוניות העומדות למכירה. בעזרת מיומנות המיון שלנו אנו יכולים לקבל פלט הממוין ע"פ מחיר עולה. כמו כן נרצה למיין את מפתחות ההאש, כגון היצרן, הדגם, שנת הייצור, וכו', בכדי שהם לא יופיעו בסדר שונה עבור כל מכונית, כי מפתחות ההאש אינם ממוינים מראש.

 #Double-sort by price and key
 print "\nCars for sale sorted by price:\n";
 $count=0;
 foreach $saleitem 
 (sort {$a->{price}<=>$b->{price} } @carsforsale)
{$count++;
 print "Sale item $count:\n";
 foreach $hash_key (sort keys %{$saleitem})
 {print "\t$hash_key: $saleitem->{$hash_key}\n"}
 }

לולאת ה foreach החיצונית, עוברת על כל האש ברשימת ה carforsale. החפצים ממוינים בעזרת פונקצית ה sort, עם הקוד המשווה את ערכי מפתח ה "price" (המחיר) בכל האש. בתוך ההאש המפתחות ממיונים בסדר אלפביתי ומודפסים עם ערכיהם המותאמים.

אנו יכולים להוציא מתוך רשימת האב, carforsale תת רשימה של יצרנים, לדוגמא האש של מכוניות המיוצרות ע"י טויוטה.

@toyotas=();
foreach $car (@carsforsale) 
{ if ($car->{make} eq "Toyota") 
{ push(@toyotas,$car) }
}

התוצאה תהיה רשימת toyotas אשר מהווה קבוצה חלקית לרשימת ההאש המקורית - carforsale, אשר ניתנת לטיפול והוצאה כפלט באותה הדרך.

רשימה של רשימות
תוכן עניינים
האש של רשימות

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
תזכורת: רשימות וטבלאות האש  
כל סוגי המיונים: רשימות  
כל סוגי המיונים: טבלאות האש  
רשימה של רשימות  
רשימה של האשים  
האש של רשימות  
האש של האשים  
סיכום  
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl