Ruby:
שימוש במערכים אסוציאטיביים
איך לעשות:
יצירה ושימוש בהאשים ברובי היא פשוטה. ניתן לאתחל האש ריק, למלא אותו בזוגות מפתח-ערך, לגשת לערכים לפי המפתחות שלהם ועוד. הנה איך עושים את זה:
# יצירת האש
my_hash = { "name" => "John Doe", "age" => 30 }
# דרך נוספת ליצור האש
another_hash = Hash.new
another_hash["position"] = "מפתח"
# גישה לערכי האש
puts my_hash["name"] # פלט: John Doe
# הוספת זוג מפתח-ערך חדש
my_hash["language"] = "Ruby"
puts my_hash # פלט: {"name"=>"John Doe", "age"=>30, "language"=>"Ruby"}
# התמצאות דרך האש
my_hash.each do |key, value|
puts "#{key}: #{value}"
end
# פלט:
# name: John Doe
# age: 30
# language: Ruby
ניתן גם להשתמש בסימבולים כמפתחות יותר יעילים:
# שימוש בסימבולים למפתחות
symbol_hash = { name: "Jane Doe", age: 22 }
puts symbol_hash[:name] # פלט: Jane Doe
צלילה עמוקה:
המושג של מערכים אסוציאטיביים אינו ייחודי לרובי; רבות מהשפות מיישמות אותם תחת שמות שונים, כמו מילונים בפייתון או אובייקטים בג’אווהסקריפט (כאשר משמשים כזוגות מפתח-ערך). בשלבים המוקדמים של רובי, האשים היו מעט יותר איטיים ולא כל כך גמישים. עם זאת, במרוצת הזמן, מימוש ההאשים של רובי התייעל רבות, בייחוד לגבי מפתחות סימבול, מה שהפך אותם למאוד יעילים לגישה ועדכונים תכופים.
האשים של רובי בולטים בגלל הנוחות התחבירית והגמישות שלהם - אפשר להשתמש בכמעט כל סוג של אובייקט כמפתח, אם כי סימבולים ומחרוזות הם הנפוצים ביותר. מבפנים, האשים של רובי מיושמים תוך שימוש באלגוריתם האשינג שמאזן בין מהירות ליעילות זיכרון, אפילו כאשר מספר האלמנטים גדל.
אף על פי שההאשים הם גמישים ביותר, הם אינם הפתרון היחידי לאחסון נתונים ברובי. לאוספים מסודרים, מערכים הם יותר מתאימים, ולערכות פריטים ייחודיים, Set עשוי להיות בחירה טובה יותר. בנוסף, למבני נתונים מורכבים מאוד, ייתכן שיהיה נבון ליצור מחלקות מותאמות אישית.
זכרו, הבחירה בין שימוש בהאש לבין מבני נתונים אחרים תלויה לרוב במקרה השימוש הספציפי - האשים מצטיינים בחיפושים מהירים ובשמירה על אסוציאציות בין מפתחות ייחודיים לערכים שלהם.