• Publicidad

Dar el mismo valor a los elementos de un hash y ordenarlos

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

Dar el mismo valor a los elementos de un hash y ordenarlos

Notapor slopal » 2006-01-30 15:49 @701

¿Hay alguna manera directa de dar el mismo valor a todos los elementos de un hash? ¿O hará falta hacer un bucle obligatoriamente? (si es un bucle ya pruebo de hacerlo yo misma).

Y luego otra cosa: si en ese hash, en cada par de valores, el primero es un número y el segundo otra cosa, ¿cómo podría hacer para ordenarlos de menor a mayor teniendo en cuenta el primer elemento del par? He visto por ahí algo de "sort" pero no lo tengo muy claro...

P.D.: si en el primer caso hubiera que hacer un bucle... ¿se podrían unificar las dos cosas en uno solo? :)

¡¡¡¡¡GRACIAS!!!!! Ya no pregunto más por hoy :P
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Publicidad

Re: Dar el mismo valor a los elementos de un hash y ordenarl

Notapor explorer » 2006-01-30 16:08 @714

slopal escribiste:¿Hay alguna manera directa de dar el mismo valor a todos los elementos de un hash? ¿O hará falta hacer un bucle obligatoriamente? (si es un bucle ya pruebo de hacerlo yo misma)
$hash{ $_ } = "valor" foreach keys %hash;

o

map { $hash{ $_ } = "valor" } keys %hash;

slopal escribiste:y luego otra cosa, si en ese hash, en cada par de valores, el primero es un número y el segundo es otra cosa, ¿cómo podría hacer para ordenarlos de menor a mayor teniendo en cuenta el primer elemento del par? He visto por ahí algo de "sort" pero no lo tengo muy claro...
Cuidado... por definición no sabemos el orden en que están almacenadas las claves de un hash. Como mucho, podemos luego sacarlas de forma ordenada con el sort:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach ( sort { $a <=> $b } keys %hash ) {
  2.     print $hash{ $_ };
  3. }
  4.  
  5. # o
  6.  
  7. print $hash{ $_ } foreach sort { $a <=> $b } keys %hash;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
(Aquí está puesto una ordenación numérica).

slopal escribiste:P.D.: si en el primer caso hubiera que hacer un bucle... ¿se podrían unificar las dos cosas en uno solo? :)
Humm... Si todos los valores del hash van a tener el mismo valor... te dará igual hacerlo de forma ordenada que no... Supongo...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-01-30 16:41 @737

Gracias.

Al final me has hecho pensar... ¿y para que quiero un hash? (es que antes lo tenía para diferentes valores).

Me he arreglado con una lista :)

Muchas gracias, en serio :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Dar el mismo valor a los elementos de un hash y ordenarl

Notapor Perl user » 2006-01-30 17:20 @764

explorer escribiste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $hash{ $_ } = "valor" foreach keys %hash;
  2. # o
  3. map { $hash{ $_ } = "valor" } keys %hash;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Tu primer caso es el más correcto. ¿Por qué el segundo no? Bueno, ya que andas leyendo a Damian Conway, por allí podrás leer que debe evitarse las funciones de alto orden en void context ( contexto vacío ), no siempre son mas rápidas que un for/foreach.

Otro punto importante aparte del mal uso de map{}, es que se ve claro que estás generando dos listas: la que retorna keys(), y la que está devolviendo map{}.

Si realmente lo quieres hacer de manera "correcta" con map{}, lo que tendrías que hacer es iterar sobre todos los miembros del hash ( incluyendo valores ) y solo reemplazar la parte de los valores para que la lista que retorna map{} sea asignada de nuevo a %hash.

%hash = map { $hash{$_} ? $_ : "foo" } %hash;

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados