עבודה עם Hashtable ומילון ב- C #

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

טבלת גיבוב

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

static void Main()

       {

           Hashtable hashTable = new Hashtable();

           hashTable.Add(1, "Joydip");

           hashTable.Add(2, "James");

           hashTable.Add(3, "Steve");

           Console.WriteLine("The key / value pairs are:--");

           foreach (int key in hashTable.Keys)

           {

               Console.WriteLine("Key: "+ key + " Value: "+ hashTable[key].ToString());

           }

           Console.Read();

       }

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

IDictionaryEnumerator enumerator = hashTable.GetEnumerator();

while (enumerator.MoveNext())

{

Console.WriteLine("Key: " + enumerator.Key.ToString() + " Value: " + enumerator.Value.ToString());

}

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

Hashtable hashTable = new Hashtable();

hashTable.Add(1, "Joydip");

hashTable.Add(2, "James");

hashTable.Add(3, "Steve");

foreach (DictionaryEntry dictionaryEntry in hashTable)

{

   Console.WriteLine("Key: " + dictionaryEntry.Key.ToString() + " Value: " + dictionaryEntry.Value.ToString());

}

חיפוש פריט ב- Hashtable מהיר יותר בהשוואה לאוספים אחרים שאינם גנריים - בואו נבין למה. רשומה ב- Hashtable בדליים (כל דלי יכול להכיל מספר רשומות) באמצעות מקשי hash. מפתח ה- hash נוצר בתורו באופן אוטומטי באמצעות אלגוריתם hashing. ה- MSDN קובע: "כאשר מוסיפים אלמנט ל- Hashtable, האלמנט ממוקם בתוך דלי על בסיס קוד החשיש של המפתח. חיפושים אחרונים של המפתח משתמשים בקוד ה- hash של המפתח כדי לחפש רק דלי מסוים אחד, ובכך מקטין באופן משמעותי את מספר השוואות המפתח הנדרשות למציאת אלמנט. "

מילון

חלק מהשיעורים החשובים ב- System.Collections.Genic namsepace כוללים: List, Queue, HashSet, LinkedList, Stack, LinkedListNode and Dictionary. מחלקת המילון ב- C # מייצגת מבנה נתונים כללי שיכול להכיל מפתחות וערכי נתונים. לפיכך, באפשרותך לאחסן נתונים מכל סוג שהוא במופע מילון.

שים לב שבעוד שממשק ICollection מאריך את ממשק ה- IEnumerable, הן ממשק IDictionary והן IList מאריכים את ממשק ICollection. מחלקת המילון כלולה במרחב השמות System.Collections.Generic. למעשה, מילון מכיל אוסף כללי של זוגות מפתח / ערך. באפשרותך לנצל את שיטת ההוספה של מחלקת המילון לאחסון אובייקטים במופע מילון. מילון מהיר יותר מאשר Hashtable מכיוון שהוא מסלק את תקורות האיגרוף והאי-אגרוף.

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

Dictionary dictionary = new Dictionary();

dictionary.Add(1, "Joydip");

dictionary.Add(2, "James");

dictionary.Add(3, "Steve");

foreach (KeyValuePair kvp in dictionary)

{

Console.WriteLine(kvp.Key.ToString() + " - " + kvp.Value.ToString());

}

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

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