• Publicidad

Duda con hashes y llaves

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Duda con hashes y llaves

Notapor fgalves » 2007-03-05 10:48 @491

Hola a todos,

Estoy trabajando con dos hash, cada uno con 9 campos que son usados como llave (key). El principal ($Hash), me sirve para mantener una serie de valores clasificados por la llave global (los 9 campos anteriores). El segundo hash ($SubStats), es un hash temporal que contiene la información necesaria para poder actualizar el hash principal.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$Hash{$key0}{$key1}{$key2}{$key3}{$key4}{$key5}{$key6}{$key7}{$key8}{$key9}{C_Number} += $$SubStats{$key0}{$key1}{$key2}{$key3}{$key4}{$key5}{$key6}{$key7}{$key8}{$key9}{C_Number};
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El caso es que quisiera mantener y actualizar el hash principal, ($Hash) pero sin tener en cuenta si las "keys" de $SubStats están en mayúscula o en minúsculas (NO case-sensitive).

Dicho de otra forma: si una key de $SubStats esta en minúsculas (por ejemplo 'esp' ), y en el hash principal (Hash), ya existe una entrada donde todas las keys son iguales pero la key correspondiente está en mayúsculas ('ESP'), quisiera que fuera tomada como si de mayúsculas se tratara.

Y lo mismo para el caso inverso.
No sé si mi mensaje es lo bastante claro...

Lo que yo había pensado hacer:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$Hash{/$key0/i}{/$key1/i}{/$key2/i}{/$key3/i}{/$key4/i}{/$key5/i}{/$key6/i}{/$key7/i}{/$key8/i}{/$key9/i}{C_Number} += $$SubStats{/$key0/i}{/$key1/i}{/$key2/i}{/$key3/i}{/$key4/i}{/$key5/i}{/$key6/i}{/$key7/i}{/$key8/i}{/$key9/i}{C_Number};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es decir, añadir marcadores "case insensitive" para cada llave. ¿Alguien ve alguna pega en dicha solución?

Gracias por cualquier consejo,
Un saludo,
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor explorer » 2007-03-05 18:19 @805

Debes decidir si las claves de %Hash serán en mayúscula o minúscula.

Luego, cuando pongas las claves en %SubStats, pon las claves bajo las funciones lc() o uc() para asegurarte que las claves son de un sentido o de otro.

Le pega de tu solución: las operaciones de coincidencia no sirven como operaciones de transformación. Transformar algo en mayúscula o minúscula se hace de otras formas (5 o 6 formas distintas), pero no con operaciones de coincidencia.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2007-03-06 00:13 @051

Te recomiendo que prendas una fogata y hagas un baile implorando a los dioses de Perl, y verás como con un poco de magía puedes hacer tu propia versión de como un hash debería de funcionar.

Usando el módulo Tie::Hash puedes hacer tus hashes personales y lograr justamente lo que quieres sin la necesidad de cambiar algo en tu código original, el tutorial lo puedes ver en la siguiente liga:
http://perlenespanol.com/tutoriales/fun ... ashes.html


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado