PureBasic

NewMap


Синтаксис
NewMap name.<type>([Slots])      

Описание


NewMap позволяет объявить новую Хеш-карту, также известную как Ассоциативный массив. Она позволяет осуществлять быстрый доступ к элементу, на основе ключа. Каждый ключ в хеш-карте уникален, это значит, что она не может содержать два различных элемента с одним и тем же ключом. Нет никаких ограничений по количеству элементов, таким образом в хеш-карте может быть столько элементов, сколько необходимо. Хеш-карта может иметь стандартный или структурированный тип. Просмотреть все команды для управления хеш-картами можно в библиотеке Map.

При использовании нового ключа, в хеш-карту автоматически добавляется новый элемент. Если другой элемент с тем же ключом уже присутствует в хеш-карте, то он будет заменен на новый. После того как элемент был создан или к нему был произведён доступ, он становится текущим элементом карты, и доступ к этому элементу может быть выполнен без указания ключа. Это полезно при использовании структурированной хеш-карты, так как для доступа к различным полям структуры, поиск по этому пункту уже не будет производится

Хеш-карты по умолчанию являются локальными. Это означает, что должны использоваться команды Global или Shared если объявленная хеш-карта, будет использоваться в процедурах. Также можно сделать хеш-карту параметром в процедуре, при помощи ключевого слова Map.

Для быстрого обмена содержимого хеш-карты предусмотрено ключевое слово Swap.

Дополнительный параметр 'Slots' определяет сколько слотов будет иметь хеш-карта, для хранения элементов. Чем больше слотов, имеет хеш-карта, тем быстрее будет обращение к элементу, но требуется больше памяти, которую хеш-карта будет использовать. Необходим компромисс, зависящий от числа элементов, которые хеш-карта будет содержать и скоростью, необходимой для доступа к элементам. Значение по умолчанию 512. Этот параметр не имеет влияния на количество элементов, которое хеш-карта может содержать

Пример: Простая Хеш-карта

NewMap Country.s()

Country("GE") = "Germany"
Country("FR") = "France"
Country("UK") = "United Kingdom"

Debug Country("FR")

ForEach Country()
    Debug Country()
Next

Пример: Хеш-карта как параметр процедуры

NewMap Country.s()

Country("GE") = "Germany"
Country("FR") = "France"
Country("UK") = "United Kingdom"

Procedure DebugMap(Map ParameterMap.s())

    ParameterMap("US") = "United States"

    ForEach ParameterMap()
        Debug ParameterMap()
    Next

EndProcedure

DebugMap(Country())

Пример: Структурированная Хеш-карта

Structure Car
    Weight.l
    Speed.l
    Price.l
EndStructure

NewMap Cars.Car()

; Здесь мы используем текущий элемент после новой вставки
;
Cars("Ferrari F40")\Weight = 1000
Cars()\Speed = 320
Cars()\Price = 500000

Cars("Lamborghini Gallardo")\Weight = 1200
Cars()\Speed = 340
Cars()\Price = 700000

ForEach Cars()
    Debug "Car name: "+MapKey(Cars())
    Debug "Weight: "+Str(Cars()\Weight)
Next