פרק 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, אשר ניתנת לטיפול והוצאה כפלט באותה הדרך. רשימה
של רשימות
|