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 iIterar
local aChaves as array
aChaves := oMap:keys()
for i := 1 to len(aChaves)
conout(aChaves[i] + ' = ' + oMap:get(aChaves[i]))
next iPerformance comparada
| Operacao | Array + aScan | FwHashMap |
|---|---|---|
| Lookup (1k items) | ~500 microseg | ~5 microseg |
| Insert | O(1) | O(1) |
| Memoria | menor | ~2x maior |
Exemplos
Cache key-value
oMap := FwHashMap():new()
oMap:put('chave', valor)
local x := oMap:get('chave')