Articulos Politicos mas Recientes:
Firmar peticion para mejorar la calidad de atención Médica

30/11/2019 Forzozas comparaciones (por Enrique G. Avogadro)

23/11/2019 Caretas y espejos(por Enrique G. Avogadro) :::

16/11/2019 Desacatados (por Enrique G. Avogadro) :::

.. ..
Entrá al fascinante mundo de los médicos, conoce como hacen tus controles de Salud
Clinica de Apnea y Ronquido
Columnistas Destacados

PERL

Cómo ordenar una lista o una matriz

 

by alfi

 

Un tema frecuente es ordenar una matriz en orden ascendente o descendente para presentar un resultado.

Por ejemplo, si tuviéramos dos clases de vectores $t{} y $v{}con éstos datos:

 

El primer vector, tiene contenido alfanumérico

$t{0} = "01-Si tienes o tuvieras pareja estable, la abandonarías?";
$t{1} = "02-Si tienes o tuvieras hijos, los abandonarías?";
$t{2} = "03-Te dedicarías a viajar por el mundo ?";
$t{3} = "04-Venderías todo lo que tienes para viajar?";
$t{4} = "05-Pedirías dinero prestado a un amigo?";
 

El segundo vector, tiene contenido numérico

$v{0} = 15;
$v{1} = 4;
$v{2} = 8;
$v{3} = 3;
$v{4} = 1;

 

Ambos vectores están vinculados entre sí, ya que se trata de una encuesta, en donde cada vector $t{} tiene una cantidad de votos $v{}. Pero nosotros deseamos mostrarlos ordenados de acuerdo a la cantidad de votos, sin que se desvinculen los datos de texto, es decir sin que se mezclen.

 

Primero, creamos una matriz, que tenga el numero primero y el texto a continuación:

 

for ($g = 0; $g < 5;  $g++){
  $dupla = "$v{$g}|$t{$g}";

  push(@desorden,$dupla);
}

 

Aquí, lo que hicimos es crear un bucle for ($g = 0; $g < 5;  $g++){
para poder agregar todos los vectores o sea las dimensiones que son 5.

 

 Fijese que en la variable $dupla, unimos el vector numérico primero $v{$g} y luego el vector alfanumérico $t{$g}, separados por un pipe |.

  $dupla = "$v{$g}|$t{$g}";

 

Luego, agregamos a la matriz @desorden, cada $dupla que nos genere el bucle for.

 

Ahora, tenemos la matriz @desorden, sin ordenar y tenemos que ordenarla.

 

@orden1 = sort { $a <=> $b } @desorden;
@orden2=reverse(@sorted);

 

Con la primer instrucción @orden1 = sort { $a <=> $b } @desorden;
 
lo que hacemos es ordenar en sentido ascendente la matriz, con lo cual en @orden1, tendremos:

 

"1|05-Pedirías dinero prestado a un amigo?";
"3|04-Venderías todo lo que tienes para viajar?";
"4|02-Si tienes o tuvieras hijos, los abandonarías?";
"8|03-Te dedicarías a viajar por el mundo ?";
"15|01-Si tienes o tuvieras pareja estable, la abandonarías?";

 

Como vemos, aquí está ordenado de menor a mayor según el resultado del número que está antes del signo pipe |.

 

Pero nosotros queremos que este ordenado de modo descendente, de modo que le hacemos @orden2=reverse(@sorted);

y queda así:

 

"15|01-Si tienes o tuvieras pareja estable, la abandonarías?";

"8|03-Te dedicarías a viajar por el mundo ?";
"4|02-Si tienes o tuvieras hijos, los abandonarías?";
"3|04-Venderías todo lo que tienes para viajar?";
"1|05-Pedirías dinero prestado a un amigo?";
 

Para imprimir en pantalla el resultado haríamos:

 

foreach $c(@orden2){
 ($votos,$texto) = split(/\|/,$c);
 print "$texto - ";
 print "$votos<br>";
}
 

El script completo:

 

#!/usr/bin/perl
print "Content-type:text/html\n\n";
$t{0} = "01-Si tienes o tuvieras pareja estable, la abandonarías?";
$t{1} = "02-Si tienes o tuvieras hijos, los abandonarías?";
$t{2} = "03-Te dedicarías a viajar por el mundo ?";
$t{3} = "04-Venderías todo lo que tienes para viajar?";
$t{4} = "05-Pedirías dinero prestado a un amigo?";
$v{0} = 15;
$v{1} = 4;
$v{2} = 8;
$v{3} = 3;
$v{4} = 1;

for ($g = 0; $g < 5;  $g++){
  $dupla = "$v{$g}|$t{$g}";

  push(@desorden,$dupla);
}

@orden1 = sort { $a <=> $b } @desorden;
@orden2=reverse(@sorted);

foreach $c(@orden2){
 ($votos,$texto) = split(/\|/,$c);
 print "$texto - ";
 print "$votos<br>";
}

 

COMENTAR ESTE ARTICULO
Su Nombre
Su email
Comentario
 
(El comentario será evaluado previo a ser publicado en la página con su nombre + email) Las respuestas, aparecerán en la página consultada
Enviar Mensajes Públicos Enviar Mensajes Públicos
Articulos más leidos
: : : TORAX OSEO
: : : ETMOIDES, ESFENOIDES, PARIETALES, OCCIPITAL
: : : Arteria Aorta y sus ramas
: : : Nutricion, Energia y Metabolismo
: : : ARTICULACIONES
: : : Arteria Aorta y sus ramas
: : : GENERALIDADES DE MUSCULOS. MUSCULOS DE LA CABEZA
: : : MIEMBRO SUPERIOR OSEO
: : : Trabajo Practico Nº2 d
: : : Aparato Digestivo II
: : : MUSCULOS DEL TÓRAX, LA PELVIS, MIEMBROS SUPERIOR E INFERIOR
: : : Trabajo Practico Nº2 d
: : : Sistema Nervioso
: : : HUESOS DEL CRANEO: Temporal
: : : La célula
: : : MUSCULOS DEL CUELLO
: : : Trabajo Practico Nº2 a
: : : Trabajo Practico Nº1
: : : COLUMNA VERTEBRAL
: : : CINTURAS PELVIANA Y ESCAPULAR
: : : MIEMBRO INFERIOR
: : : Aparato Digestivo
: : : Aparato Digestivo
: : : Huesos de la CARA
: : : Aparato digestivo
: : : La piel - Esqueleto Oseo, Cráneo: el Frontal
: : : Trabajo Practico Nº2 a
: : : Cuál es tu dosha ? (Ayurveda)
: : : Tabla de indice glicemico
: : : Consecuencias de la alimentación inadecuada
: : : Cirugia adenoidea (de las vegetaciones adenoides)
: : : Nervio olfatorio I primer par craneal
: : : Vértigo y enfermedad de meniere
: : : Cirugia de amigdalas
: : : Sindrome y Cefalea Tensional
: : : SERC betahistina
: : : Abceso o flemón periamigdalino
: : : Adenoidectomía en paciente con Hemopatía de VON WILLEBRAND
: : : Sindrome de Samter
: : : Hipoacusia Súbita
: : : Nervio optico, el segundo par craneal
: : : Sindrome de Beckwith Wiedemann
: : : Amigdalas (palatinas)
: : : Adenoides o crecimiento de tejido linfoideo detras de la nariz
: : : Argentina es el Tercer Mundo con gente bien vestida y rostro bonito
: : : Test de lesbianismo
: : : Principios básicos de electricidad
: : : La comunicación
: : :
Alfinal.com no se responsabiliza por el contenido de los artículos publicados.
Si el contenido de algun artículo ofende a terceros, comuniquelo a Alfinal.com
www.alfinal.com - Todos los derechos reservados 2012