FwHashMap

Hash map (dicionario chave-valor) em TLPP. Lookup O(1), substitui aScan O(n) em arrays grandes. Equivalente a Map de outras linguagens.

Assinatura: FwHashMap():new() -> oMap

Retorna: object

FwHashMap e estrutura de dados key/value com lookup O(1) — muito mais rapido que aScan em array. Substitui hacks com array de array em busca de performance.

Sintaxe

local oMap as object
oMap := FwHashMap():new()

oMap:put('cliente1', oCliente1)
oMap:put('cliente2', oCliente2)

local oCli as object
oCli := oMap:get('cliente1')

if oMap:contains('cliente3')
    // existe
endif

oMap:remove('cliente1')

Caso de uso: cache de tabelas

// Em vez de DBSeek toda vez:
local oCache as object
oCache := FwHashMap():new()

// Carrega tudo na memoria UMA vez
DBSelectArea('SA1')
SA1->(DBSetOrder(1))
SA1->(DBGoTop())
while !SA1->(EOF())
    oCache:put(AllTrim(SA1->A1_COD), AllTrim(SA1->A1_NOME))
    SA1->(DBSkip())
end

// Depois, busca instantanea:
for i := 1 to len(aPedidos)
    cNome := oCache:get(aPedidos[i][1])  // O(1)
next i

Iterar

local aChaves as array
aChaves := oMap:keys()
for i := 1 to len(aChaves)
    conout(aChaves[i] + ' = ' + oMap:get(aChaves[i]))
next i

Performance comparada

OperacaoArray + aScanFwHashMap
Lookup (1k items)~500 microseg~5 microseg
InsertO(1)O(1)
Memoriamenor~2x maior

Exemplos

Cache key-value

oMap := FwHashMap():new()
oMap:put('chave', valor)
local x := oMap:get('chave')

Veja também