¿Cómo devolver el índice de una lista ordenada en Perl? -- perl camp Relacionados El problema

How to return a sorted list's index in Perl?


1
vote

problema

Español

Di, tengo una lista:

  @abc = (5,7,6,2,7,1);   

Tengo que obtener una lista ordenada, así como un índice de lista ordenada. Por lo que la salida será:

  @sorted_list = (7,7,6,5,2,1); @sorted_list_index = (1,4,2,0,3,5);   

También estoy buscando un enfoque muy eficiente para este problema, ya que en realidad estoy tratando con una larga lista con 2 ^ 16 entradas.

Original en ingles

Say, I have a list:

@abc = (5,7,6,2,7,1); 

I have to obtain a sorted list as well as a sorted list index. So the output will be:

@sorted_list = (7,7,6,5,2,1); @sorted_list_index = (1,4,2,0,3,5); 

I am also looking a very efficient approach for this problem, since I am actually dealing with a long list with 2^16 entries.

  

Lista de respuestas

12
 
vote
vote
La mejor respuesta
 

Si desea ordenar los índices, deberá generarlos

  0..$#unsorted   

Luego los ordena como cualquier otra cosa

  my @sorted_indexes = sort { $unsorted[$b] <=> $unsorted[$a] } 0..$#unsorted;   

Agarrar los valores ordenados se puede hacer usando una rebanada.

  my @sorted_values = @unsorted[ @sorted_indexes ];   
 

If you want to sort the indexes, you'll need to generate them

0..$#unsorted 

Then you sort them like anything else

my @sorted_indexes = sort { $unsorted[$b] <=> $unsorted[$a] } 0..$#unsorted; 

Grabbing the sorted values can be done using a slice.

my @sorted_values = @unsorted[ @sorted_indexes ]; 
 
 
0
 
vote

Esta es mi solución:

  use strict; use warnings;  my @abc = (5,7,6,2,7,1); my $i = 0;  #Create an array of hashes (with value and index) my @temp_abc = map { {value=>$_, index=>$i++} } @abc;  #Sort by the value of each hash my @sorted_temp_abc = sort { $b->{value} <=> $a->{value} } @temp_abc;   #extract the values to array @sorted_list my @sorted_list = map { $_->{value} } @sorted_temp_abc;  #extract the values to array @sorted_list_index my @sorted_list_index = map { $_->{index} } @sorted_temp_abc;  print "@sorted_list ";        #<-- prints: 7 7 6 5 2 1 print "@sorted_list_index ";  #<-- prints: 1 4 2 0 3 5   
 

This is my solution:

use strict; use warnings;  my @abc = (5,7,6,2,7,1); my $i = 0;  #Create an array of hashes (with value and index) my @temp_abc = map { {value=>$_, index=>$i++} } @abc;  #Sort by the value of each hash my @sorted_temp_abc = sort { $b->{value} <=> $a->{value} } @temp_abc;   #extract the values to array @sorted_list my @sorted_list = map { $_->{value} } @sorted_temp_abc;  #extract the values to array @sorted_list_index my @sorted_list_index = map { $_->{index} } @sorted_temp_abc;  print "@sorted_list\n";        #<-- prints: 7 7 6 5 2 1 print "@sorted_list_index\n";  #<-- prints: 1 4 2 0 3 5 
 
 
     
     

Relacionados problema

-1  ¿Cómo extrao el sobre SMTP y el encabezado con Perl?  ( How do i extract the smtp envelope and header with perl ) 
¿Qué es el sobre SMTP y el encabezado SMTP y cuál es la relación entre aquellos? ¿Cómo los extraigo con Perl? ...

1  ¿Cómo se puede descargar a través de FTP todos los archivos con una fecha actual en su nombre?  ( How can download via ftp all files with a current date in their name ) 
Tengo un formato de archivo similar a "idy03101.200901110500.axf". Tengo unos 25 archivos similares que residen en un repositorio FTP y desean descargar todos...

2  Integrando Python o Perl con PHP  ( Integrating python or perl with php ) 
Voy a ayudar a mi amigo en una mejora de su tablero de PHPBB, pero quiero hacer algo allí en Python o Perl. ¿Pero es posible integrar estos idiomas con PHP? ...

9  ¿Hay una manera de "usar" un único archivo que a su vez usa otros otros en Perl?  ( Is there a way to use a single file that in turn uses multiple others in perl ) 
Me gustaría crear varios módulos que se utilizarán en casi todos los scripts y módulos en mi proyecto. Estos podrían ser uso D en cada uno de mis scripts, a...

9  ¿Por qué la lista es la lista de mi mapa de Perl solo 1?  ( Why is the list my perl map returns just 1s ) 
El código que escribí es lo siguiente: #!/usr/bin/perl my @input = ( "a.txt" , "b.txt" , "c.txt" ) ; my @output = map { $_ =~ s/..*$// } @input ; print ...

3  Calculando un delta de años desde una cita  ( Calculating a delta of years from a date ) 
Estoy tratando de descubrir una manera de calcular el año de nacimiento para los registros cuando se le da la edad a dos decimales en una fecha determinada, e...

15  Usando constantes en perl  ( Using constants in perl ) 
Estoy tratando de definir constantes en Perl usando el constant Pragma: use constant { FOO => "bar", BAR => "foo" }; Estoy corriendo en un po...

11  ¿Qué está pasando con Perl 6? [cerrado]  ( Whats happening with perl 6 ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...

0  Uso de archivos Otros archivos Perl en otro archivo Perl [Duplicar]  ( Using files other perl files in another perl file ) 
Esta pregunta ya tiene respuestas aquí : CERRADO hace 10 años . posible duplicado: ¿Cómo p...

1  Perl: Extraer datos del texto usando REGEX  ( Perl extracting data from text using regex ) 
Estoy usando PERL para procesar el texto con REGEX. No tengo control sobre la entrada. He mostrado algunos ejemplos de la entrada a continuación. Como puede...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos