tipos sintaxis paso parametros matrices funcion escalares declaracion datos concatenar arrays perl sorting

arrays - paso - sintaxis de perl



¿Cómo ordenar los números en Perl? (6)

print "@_/n"; 4109 4121 6823 12967 12971 14003 20186

¿Cómo lo clasifico en Perl?

Usando @sorted = sort(@_); me da un orden alfabético

13041 13045 14003 20186 4109 4121 6823

¿Cómo obtengo un pedido numérico? ¿Tiene Perl funciones integradas para merge-sort, insertion-sort, etc.?


El sort de Perl se ordena alfabéticamente en orden ASCII. Para ordenar numéricamente puede usar:

@sorted = sort { $a <=> $b } @_;



Puede predefinir la función que debería usarse para comparar valores en su matriz. perldoc -f sort te da un ejemplo:

# sort using explicit subroutine name sub byage { $age{$a} <=> $age{$b}; # presuming numeric } @sortedclass = sort byage @class;

<=> operador <=> se usa para ordenar numéricamente.

@sorted = sort {$a <=> $b} @unsorted;


@l = (4109, 4121, 6823, 12967, 12971, 14003, 20186, 1, 3, 4); @l = sort { $a <=> $b } @l; print "@l/n"; # 1 3 4 4109 4121 6823 12967 12971 14003 20186

Debe proporcionar su propia subrutina de clasificación { $a <=> $b }


Puede pasar una función de comparación personalizada a la rutina de ordenación de Perl. Solo usa:

@sorted = sort { $a <=> $b } @unsorted;

La función de sort acepta una función de comparación personalizada como primer argumento, en forma de un bloque de código. La {...} parte es solo este bloque de código (ver http://perldoc.perl.org/functions/sort.html ).

sort llamará a esta función de comparación personalizada cada vez que necesite comparar dos elementos de la matriz que se va a ordenar. sort siempre pasa los dos valores para comparar como $a , $b , y la función de comparación debe devolver el resultado de la comparación. En este caso, solo usa el operador para la comparación numérica (ver http://perldoc.perl.org/perlop.html#Equality-Operators ), que probablemente fue creado solo para este propósito :-).

Solución robada sin pudor de " Perl Cookbook ", Capítulo 04 Subcapítulo 15 (comprar el libro - ¡vale la pena!)


Proporcione una función de comparación para sort() :

# sort numerically ascending my @articles = sort {$a <=> $b} @files; # sort numerically descending my @articles = sort {$b <=> $a} @files;

La función de clasificación predeterminada es cmp , string comparison, que ordenaría (1, 2, 10) en (1, 10, 2) . <=> , utilizado anteriormente, es el operador de comparación numérica.