Duvida com Hash Table

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Pessoal,

Estou estudando o recurso hash table e queria saber como é que funciona a função hb_HScan no exemplo abaixo:

Código: Selecionar todos

   hTable := { => }
   
   FOR I:=1 TO 5
      hRecord := { => }
      hb_HSet( hRecord, "CODIGO",     StrZero(i, 5) )
      hb_HSet( hRecord, "NOME",       "ALEXANDRE" )
      hb_HSet( hTable, hb_NtoS( I ), hRecord )
   NEXT

   * ??? 
   nPos := hb_HScan( hTable, "00003" ) 

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Descobri:

nPos := hb_HScan( hTable, {| nKey, cChave | cChave["CODIGO"] = "00003"} )

Agora pode apagar o elemento

hb_HDelAt( hTable, nPos )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Trocando valor

nPos := hb_HScan( hTable, {| nKey, cChave | cChave["CODIGO"] = "00003"} )
hTable[hb_NtoS(nPos), "CODIGO"] := "teste" //trocando valor na table

Muito bom, agora já dá pra brincar.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Mais informações:

https://github.com/Petewg/harbour-core/wiki/hb_H

Agora só resta saber como usar hb_HSort() fiz hb_HSort htable) mas vi o sort funcionar
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Outra forma de pegar o valor de uma chave

Código: Selecionar todos

   cReg := "3"
   cCodigo := hb_HGetDef(hTable, cReg, "teste")
   ? cCodigo["CODIGO"]
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Outro exemplo:

Código: Selecionar todos

nPos := hb_HScan( hTable, {| nKey, cChave | cChave["CODIGO"] = "00003"} )
aResult := hb_HPairAt( hTable, nPos ) 
hwg_MsgInfo(aResult[2]["CODIGO"])
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Similar a função AEval()

Código: Selecionar todos

hb_HEval( hTable, {| k,cKey |  IF( cKey["CODIGO"] == "00030", cKey["CODIGO"] := "000100", cKey["CODIGO"] := cKey["CODIGO"]), QOut( cKey["CODIGO"]+ ' ' + cKey["NOME"] ) } ) 
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Duvida com Hash Table

Mensagem por asimoes »

Corrigindo o meu post

Agora só resta saber como usar hb_HSort() fiz hb_HSort( htable) mas não vi o sort funcionar
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder