25.07.2017 Views

Intro-CSharp-Book-v2015

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!