בהמשך לפעם שעברה,
קיימת עוד שיטה לממש Dictionary רב מפתחות, ע”י שימוש בDictionary מקונן.
במקום להשתמש בDictionary כKey, ניתן להשתמש בDictionary שממפה את המפתחות שלו לDictionary אחר:
|
|
למי שאי פעם נתקל בשוויון (יותר נכון איזומורפיזם):
$ {\left({A^B}\right)}^C \cong A^{B \times C} $
(מתורת הקבוצות, אבל אפשר להבין אותו גם מספרית)
השוויון הזה בדיוק אומר ששני המבנים האלה זהים במובן מסוים:
כלומר אם יש לי Dictionary שממפה זוג $ (x,y) $ לערך $ z $, אני יכול ליצור Dictionary מתאים שממפה את $ x $ לDictionary שממפה את $ y $ ל$ z $.
אם נכתוב מחלקה משלנו העוטפת שימוש זה (כמו פעם קודמת), זה יראה בערך ככה:
|
|
המימוש קצת פחות אלגנטי מפעם קודמת, אבל יש פה יתרון עצום: אם אנחנו מעוניינים למצוא את כל הערכים שהם בעלי מפתח ראשון מסוים, נוכל לעשות זאת בקלות:
למשל נניח מעניין אותנו המיפוי של ת.ז. לשמות של כל האנשים בישראל, אז נוכל לקבל מידע זה כך:
|
|
עם המימוש הקודם נצטרך לעבוד יותר קשה:
|
|
שימו לב ששוב הירושה נותנת לנו בעיקר API יותר נוח, אבל ניתן ליצור Extension Methods מתאימים שיעשו API נוח אחר (אמנם בלי שם נוח וCollection Initializer, אבל עם מתודות נוחות מספיק)