• Publicidad

Ordenación de un arreglo alfanumérico

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Ordenación de un arreglo alfanumérico

Notapor Lor » 2007-11-10 16:17 @720

Agradecería si me pudiesen explicar cómo puedo lograr el ordenamiento de un arreglo formado por caracteres alfanuméricos donde al ordenar tenga en cuenta SOLO la parte numérica y no el carácter

Código: Seleccionar todo
100A - 200 - 300 - 210B - 4000 - 220 - 410-  300A - 3100 -


Es decir, obtener:

Código: Seleccionar todo
100A  - 200-  210B - 220 - 300 - 300A - 410 - 3100 - 4000


Este arreglo lo obtengo de una consulta SELECT, son códigos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my (%componentes)=
{
my $ref = $dbh_m->selectall_arrayref( " SELECT cp.id_comp_princ, cp.nombre, " .
                                        " cp.codi_comp_princ" .
                                        " FROM componentes_princ cp " .
                                        " WHERE cp.estado = 'A' " .
                                        " ORDER by cp.id_comp_princ");

  foreach (@$ref) {$componentes{${$_}[0]} = ${$_}[2] . ' )- '. ${$_}[1] }
        }
  my (@componentes) = sort { $componentes{$a} cmp
                            $componentes{$b}} keys %componentes;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Con el sort NO LOGRO lo que necesito.

¡¡¡ Muchas gracias !!!
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Publicidad

Notapor explorer » 2007-11-10 18:24 @808

Tienes que hacer una ordenación numérica, no alfanumérica:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @componentes = qw(100A 200 300 210B 4000 220 410 300A 3100);

@componentes = sort { $a <=> $b } @componentes;

print "@componentes";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Nota la diferencia: en lugar de cmp, usamos <=>.
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

continua Error

Notapor Lor » 2007-11-11 08:30 @396

Explorer, muchas gracias, pero yo ya lo he probado colocando el <=> y el pl no se ejecuta, no me tira error, pero no puedo ejecutarlo

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my (%componentes)=
{
my $ref = $dbh_m->selectall_arrayref( " SELECT cp.id_comp_princ, cp.nombre, " .
                                        " cp.codi_comp_princ" .
                                        " FROM componentes_princ cp " .
                                        " WHERE cp.estado = 'A' " .
                                        " ORDER by cp.id_comp_princ");

  foreach (@$ref) {$componentes{${$_}[0]} = ${$_}[2] . ' )- '. ${$_}[1] }
        }
  my (@componentes) = sort { $componentes{$a}   <=>
                            $componentes{$b}} keys %componentes;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Notapor Lor » 2007-11-11 09:06 @421

MUCHAS GRACIAS, ya detecte el ERROR, estaba en el paréntesis de concatenación, por alguna causa tira error, lo saqué y funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my (%componentes)=
{
my $ref = $dbh_m->selectall_arrayref( " SELECT cp.id_comp_princ, cp.nombre, " .
" cp.codi_comp_princ" .
" FROM componentes_princ cp " .
" WHERE cp.estado = 'A' " .
" ORDER by cp.id_comp_princ");

    foreach (@$ref) {$componentes{${$_}[0]} = ${$_}[2] . ' )- '. ${$_}[1] }
}
my (@componentes) = sort { $componentes{$a} <=>
$componentes{$b}} keys %componentes
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282


Volver a Avanzado

¿Quién está conectado?

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