Hash - Orden
Hash - Orden
Gene;
Asi como puedo ordenar un array, bidimensional, puedo ordenar un Hash por su Valor?
gracias
Asi como puedo ordenar un array, bidimensional, puedo ordenar un Hash por su Valor?
gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Hash - Orden
Hola Mario
Usa esta funcion:
function miOrdenHash( hashArray )
return( ASort( hb_HValues( hashArray ) ) )
Espero que te funcione.
Usa esta funcion:
function miOrdenHash( hashArray )
return( ASort( hb_HValues( hashArray ) ) )
Espero que te funcione.
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
Re: Hash - Orden
Hola Manu!
gracias por responder
Hice la prueba así:
que estoy haciendo mal?
P.D: larga vida a TDBF!
gracias por responder
Hice la prueba así:
Code: Select all
PROCEDURE Main()
loca hashVar:= Hash( "a", "Zaragosa", ;
"b", "Klein" , ;
"c", "Romero" , ;
"d", "Gonzalez", ;
"e", "Baranda" )
HEval( hashVar, {|key,val| wqout({key,val}) })
? "Ordena?"
ASort( hb_HValues( hashVar ) )
HEval( hashVar, {|key,val| wqout({key,val}) }) // No ordena
? "Ordena?"
hashVar := ASort( hb_HValues( hashVar ) )
HEval( hashVar, {|key,val| wqout({key,val}) }) // Da error de argumento en el hash
P.D: larga vida a TDBF!
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Hash - Orden
La función que te envié devuelve un vector ordenado solo con los valores
Prueba esto así:
La verdad es que no sé para qué quieres un hash ordenado? o sólo quieres los valores ordenados?
A ver si te puedo ayudar?
Prueba esto así:
Code: Select all
local hashVar:= Hash( "a", "Zaragosa", ;
"b", "Klein" , ;
"c", "Romero" , ;
"d", "Gonzalez", ;
"e", "Baranda" )
local aValues := ASort( hb_HValues( hashVar ) )
aEval( aValues, {|val| wqout( val ) })
A ver si te puedo ayudar?
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
Re: Hash - Orden
Manu;
claro!, disculpá la torpeza, no se ordena el hash, sino se crea un array ordenado
La idea del orden es por lo siguiente.
Resulta que tengo un xBrowse con nombres de personas, donde se las va seleccionando, esta ordenado por un numero de ID, de manera que la búsqueda es mas agil.
Cada registro marcado, mediante la tecla space, hace lo siguiente: Demanera que cada registro marcado cambia de color.
Esta técnica de selección la uso porque la aplicación se usará en RED.
Ahora bien, cuando termina la selección, se la vuelca a otro xBrowse... si miras en la fecha de este post, vas a encontrar otro, donde hice otra consulta: "Mostrar un hash en xBrowse"; que no tuvo respuesta.
O sea finalmente, la idea es mostrar este segundo browse ordenado.
Pero como no sé como mostrar un Hash en un xBrowse, tu solución me sirve, para que el Hash me devuelva un array ordenado que es lo que puedo mostrar en ese segundo xBrowse
mareado... leeme despacio jejejeje
claro!, disculpá la torpeza, no se ordena el hash, sino se crea un array ordenado
La idea del orden es por lo siguiente.
Resulta que tengo un xBrowse con nombres de personas, donde se las va seleccionando, esta ordenado por un numero de ID, de manera que la búsqueda es mas agil.
Cada registro marcado, mediante la tecla space, hace lo siguiente:
Code: Select all
:bKeyDown := {|nK| if( nK==VK_SPACE, ( oQry:LoadQuery(), ;
if( HHasKey( hSelec, oQry:id_player ), ( HDel( hSelec, oQry:id_player ) ), ;
( HSet( hSelec, oQry:id_player, oQry:ApeyNom ), oBrw:GoDown() ) ), ;
if( Len(hSelec) >= 1, aO[_BtOk]:Enable(), aO[_BtOk]:Disable() ) ), ) }
Esta técnica de selección la uso porque la aplicación se usará en RED.
Ahora bien, cuando termina la selección, se la vuelca a otro xBrowse... si miras en la fecha de este post, vas a encontrar otro, donde hice otra consulta: "Mostrar un hash en xBrowse"; que no tuvo respuesta.
O sea finalmente, la idea es mostrar este segundo browse ordenado.
Pero como no sé como mostrar un Hash en un xBrowse, tu solución me sirve, para que el Hash me devuelva un array ordenado que es lo que puedo mostrar en ese segundo xBrowse
mareado... leeme despacio jejejeje
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Hash - Orden
Si aún así por algún motivo quieres tener la key también pueder crear un array bidimensional que tambien se puede mostrar sin problema en el browse:
Recuerda que además de la función hb_HValues( hashVar ) está hb_HKeys( hashVar ), construir un aKeysValues es fácil y que ASort admite un codeblock para ordenar:
ASORT(aKeysValues ,,, { |x, y| x[2] < y[2] }
Code: Select all
aKeysValues := {
{ k1, v1 },;
{ k2, v2 },;
...
}
ASORT(aKeysValues ,,, { |x, y| x[2] < y[2] }
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
Re: Hash - Orden
Entendido;
nuevamente gracias!
nuevamente gracias!
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Hash - Orden
Buenos días para todos,
Quisiera saber si ya existe alguna función o si directo desde xbrowse se puede cambiar el orden del hash. Ya que estoy tratando de compilar este ejemplo pero no me funciona.
El error
Quisiera saber si ya existe alguna función o si directo desde xbrowse se puede cambiar el orden del hash. Ya que estoy tratando de compilar este ejemplo pero no me funciona.
Code: Select all
#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"
PROCEDURE Main()
loca hashVar:= Hash( "a", "Zaragosa", ;
"b", "Klein" , ;
"c", "Romero" , ;
"d", "Gonzalez", ;
"e", "Baranda" )
HEval( hashVar, {|key,val| wqout({key,val}) })
? "Ordena?"
ASort( hb_HValues( hashVar ) )
HEval( hashVar, {|key,val| wqout({key,val}) }) // No ordena
? "Ordena?"
hashVar := ASort( hb_HValues( hashVar ) )
HEval( hashVar, {|key,val| wqout({key,val}) }) // Da error de argumento en el hash
Code: Select all
┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 19.09 - Sep. 2019 xHarbour development power │▄
?(c) FiveTech 1993-2019 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613)
Copyright 1999-2018, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro3.prg' and generating preprocessed output to 'leandro3.ppo'...
Generating C source output to 'leandro3.c'...
Done.
Lines 20, Functions/Procedures 1, pCodes 69
Embarcadero C++ 7.30 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
leandro3.c:
Turbo Incremental Link 6.80 Copyright (c) 1997-2017 Embarcadero Technologies, Inc.
Error: Unresolved external '_HB_FUN_HB_HVALUES' referenced from C:\FWH1909\SAMPLES\LEANDRO3.OBJ
Error: Unable to perform link
* Linking errors *
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Re: Hash - Orden
Buenos dias Leandro
Interesante tema. Nunca lo hice
En la Wiki de Harbour veo que existe: HB_HSort()
https://github.com/zgamero/sandbox/wiki/2.7-Hashes
Salvo q estes usando xHarbour, deberias ver si tiene la función
Interesante tema. Nunca lo hice
En la Wiki de Harbour veo que existe: HB_HSort()
https://github.com/zgamero/sandbox/wiki/2.7-Hashes
Salvo q estes usando xHarbour, deberias ver si tiene la función
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Hash - Orden
Lo pude solucionar utilizando la función aSort()Recuerda que además de la función hb_HValues( hashVar ) está hb_HKeys( hashVar ), construir un aKeysValues es fácil y que ASort admite un codeblock para ordenar:
ASORT(aKeysValues ,,, { |x, y| x[2] < y[2] }
Code: Select all
ASORT( aArti,,, { |x,y| x["i_articu"] < y["i_articu"] } )
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Hash - Orden
Code: Select all
function SortHash()
local hHash := Hash( "a", "Zaragosa", ;
"b", "Klein" , ;
"c", "Romero" , ;
"d", "Gonzalez", ;
"e", "Baranda" )
local aPairs, hSort
XBROWSER hHash TITLE "ORIGINAL HASH"
aPairs := {}
HEval( hHash, { | k, v, i | AAdd( aPairs, { k, v } ) } )
ASort( aPairs, nil, nil, { |x,y| x[ 2 ] < y[ 2 ] } )
hSort := {=>}
AEval( aPairs, { |a| HB_HSet( hSort, a[ 1 ], a[ 2 ] ) } )
XBROWSER hSort TITLE "SORTED HASH"
return nil
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Hash - Orden
Mr Nages, buenos días
Intente compilar con las funciones de xharbour, pero parece no funcionar.
Intente compilar con las funciones de xharbour, pero parece no funcionar.
Code: Select all
#include "Fivewin.ch"
function main()
local hHash := Hash( "a", "Zaragosa", ;
"b", "Klein" , ;
"c", "Romero" , ;
"d", "Gonzalez", ;
"e", "Baranda" )
local aPairs, hSort
XBROWSER hHash TITLE "ORIGINAL HASH"
aPairs := {}
HEval( hHash, { | k, v, i | AAdd( aPairs, { k, v } ) } )
ASort( aPairs, nil, nil, { |x,y| x[ 2 ] < y[ 2 ] } )
hSort := {=>}
AEval( aPairs, { |a| HSet( hSort, a[ 1 ], a[ 2 ] ) } )
XBROWSER hSort TITLE "SORTED HASH"
return nil
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Hash - Orden
xHarbour always stores the key/value pairs in the order of the key.
Please test this small example:
Please test this small example:
Code: Select all
hHash := hash( "Z", "AA", "A", "ZZ" )
XBROWSER hHash
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India