Por que a Table Hash ordena as chaves?

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

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Por que a Table Hash ordena as chaves?

Mensagem por clodoaldomonteiro »

Bom dia amigos.

Estou usando o Hash() para um pequeno projeto e vi que crio passar as chaves numa determinada ordem, mas quando faço um For ... Next ou visualizo o Hash com ValToPrg(), as chaves estão ordenadas por ordem alfabética.

Pergunto se existe alguma possibilidade de setar para que permaneça a ordem de criação da variável Hash?

Criando a Hash:

Código: Selecionar todos

   Private hIrMemo := Hash(;
    'ValorVerbasIncidentes', 0.00,;
    'ValorVerbasDeducoes'  , 0.00,;
    'ValorDescPrevidencia' , 0.00,;
    'qtdDependenteIR'      , 0.00,;
    'valorPorDependenteIR' , 0.00,;
    'DeducaoInativo65Anos' , 0.00,;
    'BaseCalculoIrrfNormal', 0.00,;
    'valorDeduzirIRSimplificado' , 0.00,;
    'BaseCalculoIrrfSimplificado', 0.00,;
    'ValorAliquotaIRRF'    , 0.00,;
    'ValorDeducaoIRRF'     , 0.00,;
    'ValorIRRFPago'        , 0.00,;
    'ValorIRRFLancado'     , 0.00;
    )
Resultado ordenado (depois de transformar em JSON):

Código: Selecionar todos

{
	"BaseCalculoIrrfNormal": 4201.37,
	"BaseCalculoIrrfSimplificado": 0.00,
	"DeducaoInativo65Anos": 0.00,
	"ValorAliquotaIRRF": 22.50,
	"ValorDeducaoIRRF": 651.73,
	"ValorDescPrevidencia": 469.05,
	"ValorIRRFLancado": 293.57,
	"ValorIRRFPago": 0.00,
	"ValorVerbasDeducoes": 0.00,
	"ValorVerbasIncidentes": 4670.42,
	"qtdDependenteIR": 0,
	"valorDeduzirIRSimplificado": 0.00,
	"valorPorDependenteIR": 189.59
}
Grato pela ajuda.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Ana Mitoooo
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 17 Out 2018 10:00
Localização: Sobradinho/DF

Por que a Table Hash ordena as chaves?

Mensagem por Ana Mitoooo »

Código: Selecionar todos

   Private hIrMemo
   M->hIrMemo := hb_Hash()
   hb_hKeepOrder( M->hIrMemo, .t. )
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Por que a Table Hash ordena as chaves?

Mensagem por clodoaldomonteiro »

Ana Mitoooo escreveu:

Código: Selecionar todos

   Private hIrMemo
   M->hIrMemo := hb_Hash()
   hb_hKeepOrder( M->hIrMemo, .t. )
Fico grato pela ajuda, mas esqueci de falar que é pra xHarbour e não funcionou, ou não estou informando a Lib com estas funções.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Por que a Table Hash ordena as chaves?

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

HB_HSORT()

Reorganizes the internal list of the hash table to be sorted

Syntax

      HB_HSORT( <hsTable> ) -> <hsSortedTable>

Arguments

<hsTable> a hash table, created by HB_HASH()

Returns
Funções hb_h* geralmente para HASH HBMK2 -find hb_h

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Por que a Table Hash ordena as chaves?

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

C:\dev\hb32-code>HBMK2 -find hb_h
hbhpdf.hbc (instalado):
   hb_HPDF_GetErrorString()
   hb_HPDF_IsVersion()
   hb_HPDF_Version()
xhb.hbc (instalado):
   hb_HashAddMember()
   hb_HashId()
   xhb_HashError()
Núcleo Harbour (instalado):
   hb_HAllocate()
   hb_Hash()
   hb_HAutoAdd()
   hb_HBinary()
   hb_HCaseMatch()
   hb_HClear()
   hb_HClone()
   hb_HCopy()
   hb_HDefault()
   hb_HDel()
   hb_HDelAt()
   hb_HEval()
   hb_HexToNum()
   hb_HexToStr()
   hb_HFill()
   hb_HGet()
   hb_HGetDef()
   hb_HGetRef()
   hb_HHasKey()
   hb_HKeepOrder()
   hb_HKeyAt()
   hb_HKeys()
   hb_HMAC_MD5()
   hb_HMAC_SHA1()
   hb_HMAC_SHA224()
   hb_HMAC_SHA256()
   hb_HMAC_SHA384()
   hb_HMAC_SHA512()
   hb_HMerge()
   hb_Hour()
   hb_HPairAt()
   hb_HPos()
   hb_hrbDo()
   hb_hrbGetFunList()
   hb_hrbGetFunSym()
   hb_hrbLoad()
   hb_hrbRun()
   hb_hrbSignature()
   hb_hrbUnload()
   hb_HScan()
   hb_HSet()
   hb_HSetAutoAdd()
   hb_HSetBinary()
   hb_HSetCaseMatch()
   hb_HSetDef()
   hb_HSetOrder()
   hb_HSort()
   hb_HValueAt()
   hb_HValues()

C:\dev\hb32-code>                    
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Por que a Table Hash ordena as chaves?

Mensagem por clodoaldomonteiro »

Itamar M. Lins Jr. escreveu:Olá!

Código: Selecionar todos

C:\dev\hb32-code>HBMK2 -find hb_h
hbhpdf.hbc (instalado):
   hb_HPDF_GetErrorString()
   hb_HPDF_IsVersion()
   hb_HPDF_Version()
xhb.hbc (instalado):
   hb_HashAddMember()
   hb_HashId()
   xhb_HashError()
Núcleo Harbour (instalado):
   hb_HAllocate()
   hb_Hash()
   hb_HAutoAdd()
   hb_HBinary()
   hb_HCaseMatch()
   hb_HClear()
   hb_HClone()
   hb_HCopy()
   hb_HDefault()
   hb_HDel()
   hb_HDelAt()
   hb_HEval()
   hb_HexToNum()
   hb_HexToStr()
   hb_HFill()
   hb_HGet()
   hb_HGetDef()
   hb_HGetRef()
   hb_HHasKey()
   hb_HKeepOrder()
   hb_HKeyAt()
   hb_HKeys()
   hb_HMAC_MD5()
   hb_HMAC_SHA1()
   hb_HMAC_SHA224()
   hb_HMAC_SHA256()
   hb_HMAC_SHA384()
   hb_HMAC_SHA512()
   hb_HMerge()
   hb_Hour()
   hb_HPairAt()
   hb_HPos()
   hb_hrbDo()
   hb_hrbGetFunList()
   hb_hrbGetFunSym()
   hb_hrbLoad()
   hb_hrbRun()
   hb_hrbSignature()
   hb_hrbUnload()
   hb_HScan()
   hb_HSet()
   hb_HSetAutoAdd()
   hb_HSetBinary()
   hb_HSetCaseMatch()
   hb_HSetDef()
   hb_HSetOrder()
   hb_HSort()
   hb_HValueAt()
   hb_HValues()

C:\dev\hb32-code>                    
Saudações,
Itamar M. Lins Jr.
São ótimas funções, mas não existe na versão do xHarbour do sistema que estou ajustando, e fico muito grato pela ajuda.

Abraços.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Por que a Table Hash ordena as chaves?

Mensagem por Itamar M. Lins Jr. »

Olá!
Use os "dons do espírito" !

Código: Selecionar todos

  Private hIrMemo := Hash(;
    '001_ValorVerbasIncidentes', 0.00,;
    '002_ValorVerbasDeducoes'  , 0.00,;
    '003_ValorDescPrevidencia' , 0.00,;
    '004_qtdDependenteIR'      , 0.00,;
    '005_valorPorDependenteIR' , 0.00,;
    '006_DeducaoInativo65Anos' , 0.00,;
    '007_BaseCalculoIrrfNormal', 0.00,;
    '008_valorDeduzirIRSimplificado' , 0.00,;
    '009_BaseCalculoIrrfSimplificado', 0.00,;
    '010_ValorAliquotaIRRF'    , 0.00,;
    '011_ValorDeducaoIRRF'     , 0.00,;
    '012_ValorIRRFPago'        , 0.00,;
    '013_ValorIRRFLancado'     , 0.00;
    )
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Por que a Table Hash ordena as chaves?

Mensagem por Wanderlei »

A ordem faz diferença?
já que no hash vc utiliza o nome da tag, isso quer dizer que a ordem não importa
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Por que a Table Hash ordena as chaves?

Mensagem por clodoaldomonteiro »

Wanderlei escreveu:A ordem faz diferença?
já que no hash vc utiliza o nome da tag, isso quer dizer que a ordem não importa
Bom dia,
Faz sim, é que as informações tem uma sequência útil para o usuário e queria fazer uma demonstração delas com um For ... Next e de forma genérica, já que vai ter mais de um grupo de informações de Memória de Cálculo.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder