2010-07-14 15 views
5

¿Hay una sola línea en Perl que hace algo de magia como esta?Perl array manipulation

Array = [100,200,300,400,500]; 

percent = 50% 

new_Array = [50,100,150,200,250]; 

Es decir, doy una matriz y especifico un porcentaje. Y debería darme una nueva matriz con el porcentaje dado de los valores de la matriz original.

debe tener en cuenta los números impares y darme un techo o un piso de ese valor.

Sé cómo hacerlo manualmente. ¿Me pregunto si Perl tiene algo sorprendente en la tienda?

Gracias.

Respuesta

3

Cada vez que desee transformar una lista, map es una buena apuesta. He aquí un ejemplo:

my @list = (100, 200, 300, 400, 500); 
my @new = map { int($_ * 0.5) } @list; 

print "@new"; 

Salida:

50 100 150 200 250 
+0

gracias :) que hace las cosas de redondeo. – jerrygo

7

map le permitirá transformar cada elemento en una lista.

my $percent = 50; 
my @original = qw/100 200 300 400 500/; 
my @manipulated = map { $_ * $percent/100 } @original; 
+1

Es posible que deba agregar un '' int() 'explícito en el mapa ya que parece que el interlocutor quiere redondear. – Hudson

+0

Gracias. esa es de hecho una gran solución :) – jerrygo

4

Como se pedirá una sola línea de Perl que hace la magia, aquí está:

print join " ", map { int($_ * 0.5) } (qw(100 200 300 400 500)); 

esto da

50 100 150 200 250 
+0

Gracias. Eso también funciona :) – jerrygo