Бързо прилагане на речник Habr


Речникът Swift е контейнер, който съхранява множество стойности от един и същи тип. Всяка стойност е свързана с уникален ключ, който действа като идентификатор за тази стойност в речника. За разлика от елементите в масив, елементите в речника не са в определен ред. Използвайте речник, когато трябва да търсите стойности въз основа на техния идентификатор, точно както в реалния свят речникът се използва за намиране на дефиницията на определена дума. (приблизително)
Помислете за пример на речник, проектиран за 8 елемента: той осигурява максимум 7 записа (ключове, стойности) и поне едно празно пространство (така нареченото пространство) в буфера на речника, поради което се получава един вид блокиране на търсенето чрез селекции/вмъквания (извличания/вмъквания). В памет ще изглежда по следния начин:
Постоянната памет се настройва чрез:
размер = капацитет * (размер на (растерна карта) + размер на (ключове) + размер на (стойности))
Ако организираме данните логично, получаваме нещо като:

Всяка колона формира сегмент от паметта, в който са фиксирани три параметъра: растерна стойност, ключ и стойност.
Растерната стойност в сегмента показва дали ключът и съответната стойност са валидни и дефинирани. Ако данните са невалидни/неинициализирани, сегментът се нарича интервал.
_HashedContainerStorageHeader (структура)

Тази структура действа като заглавка за бъдещия буфер на паметта. Той съдържа капацитета и информация за обема, където капацитетът е действителният капацитет на разпределената памет, а информацията за обема е броят на валидните елементи в буфера в момента.
maxLoadFactorInverse е фактор, който ви позволява да разширите буфера, ако е необходимо.
_NativeDictionaryStorageImpl (клас)
Основната задача на този клас е да разпредели оптимална за речника памет и да създаде указатели към растерни изображения, ключове и стойности, които по-късно ще трябва да бъдат обработени. Например: