Сөздік пен Hashtable
Сөздік терілді (мән түрлеріне бокс қажет емес), хэш таблицасы жоқ (сондықтан мән түрлеріне бокс қажет). Hashtable IMHO сөздігіне қарағанда мәнді алудың жақсы тәсілі бар, өйткені ол әрқашан мәннің объект екенін біледі.. NET 3.5 нұсқасын пайдалансаңыз да, ұқсас мінез-құлық алу үшін сөздікке кеңейтім әдісін жазу оңай.
Hashtable сыныбы - кілттерді сақтауға көмектесу үшін бүтін мәнді (хэш деп аталады) пайдаланатын сөздік класының белгілі бір түрі. Hashtable класы коллекциядағы белгілі бір кілтті іздеуді жылдамдату үшін хэшті пайдаланады. ішіндегі әрбір объект. NET Объект сыныбынан шыққан. Бұл сынып GetHash әдісін қолдайды, ол нысанды бірегей түрде анықтайтын бүтін санды қайтарады. Hashtable класы жалпы алғанда өте тиімді коллекция. Hashtable сыныбына қатысты жалғыз мәселе - ол аздап қосымша шығындарды қажет етеді, ал шағын жинақтар үшін (он элементтен аз) үстеме шығындар өнімділікке кедергі келтіруі мүмкін.
Хешкесте мен сөздік арасында тағы бір маңызды айырмашылық бар. Егер сіз HashTable мәнін алу үшін индекстеуіштерді пайдалансаңыз, HashTable жоқ элемент үшін нөлді сәтті қайтарады, ал сөздікте жоқ индекстеуіш арқылы элементке кіруге тырыссаңыз, сөздік қате жібереді.
Хэш кестесі нашар терілген негізгі сынып; DictionaryBase дерексіз класы тек қана терілген және ішкі HashTable пайдаланады.
Сөздікте байқаған бір қызық нәрсе, сөздікке бірнеше жазбаларды қосқанда, жазбалардың қосылу реті сақталады. Осылайша, сөздікте fоreach қолдансаңыз, жазбаларды енгізген ретпен аласыз. Дегенмен, бұл қалыпты HashTable үшін дұрыс емес, Hashtable-ге бірдей жазбаларды қосқанда, тәртіп сақталмайды. Егер 'Сөздік Хэш таблицасына негізделген' дұрыс болса, неге Сөздік тәртіпті сақтайды, бірақ HashTable сақтамайды?
Олардың неге басқаша әрекет ететініне келетін болсақ, бұл Жалпы сөздік хэш кестені жүзеге асырады, бірақ System. Collectiоns. Hashtable негізінде емес. Жалпы сөздіктің іске асырылуы тізімнен кілт-мән жұптарын бөлуге негізделген. Содан кейін олар кездейсоқ қол жеткізу үшін хэш кесте шелектерімен индекстеледі, бірақ ол нөмірлеушіні қайтарғанда, ол тізімді дәйекті ретпен жылжиды – бұл жазбалар қайта пайдаланылмай тұрғанда, кірістіру реті болады.