You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
740 Въведение в програмирането със C#<br />
стойности за капацитет и максимална степен на запълване. Добре е, ако<br />
предварително знаем приблизителният брой на елементите, които ще бъдат<br />
добавени в нашата хеш-таблица, да го укажем още при създаването й. Така<br />
ще избегнем излишното разширяване на таблицата и ще постигнем подобра<br />
ефективност. По подразбиране стойността на началния капацитет е<br />
16, а на максималната степен на запълване е 0.75.<br />
Да разгледаме какво прави всеки един от методите реализирани в класа<br />
Dictionary:<br />
- void Add(K, V) добавя нова стойност за даден ключ. При опит за<br />
добавяне на ключ, който вече съществува в речника, се хвърля<br />
изключение. Операцията работи изключително бързо.<br />
- bool TryGetValue(K, out V) връща елемент от тип V чрез out параметър<br />
за дадения ключ или null, ако няма елемент с такъв ключ. Резултатът<br />
от изпълнението на метода е true, ако е намерен елемент. Операцията<br />
е много бърза, тъй като алгоритъмът за търсене на елемент по ключ в<br />
хеш-таблица се доближава по сложност до O(1)<br />
- bool Remove(K) изтрива от речника елемента с този ключ. Операцията<br />
работи изключително бързо.<br />
- void Clear() премахва всички елементи от речника.<br />
- bool ContainsKey(K) проверява дали в речника присъства наредена<br />
двойка с посочения ключ. Операцията работи изключително бързо.<br />
- bool ContainsValue(V) проверява дали в речникa присъстват една или<br />
повече наредени двойки с посочената стойност. Тази операция работи<br />
бавно, тъй като проверява всеки елемент на хеш-таблицата.<br />
- int Count връща броя на наредените двойки в речника.<br />
- Други операции – например извличане на всички ключове, стойности<br />
или наредени двойки в структура, която може да бъде обходена чрез<br />
цикъл.<br />
Студенти и оценки – пример<br />
Ще илюстрираме как се използват някои от описаните по-горе операции<br />
чрез един пример. Нека имаме студенти, като всеки от тях би могъл да има<br />
най-много една оценка. Искаме да съхраняваме оценките в някаква<br />
структура, в която можем бързо да търсим по име на студент.<br />
За тази задача ще създадем хеш-таблица с начален капацитет 6. Тя ще<br />
има за ключове имената на студентите, а за стойности – някакви техни<br />
оценки. Добавяме 6 примерни студента, след което наблюдаваме какво се<br />
случва, когато отпечатваме на стандартния изход техните данни. Ето как<br />
изглежда кодът от този пример:<br />
using System;