2010-07-14 10 views
5

C'è una sola riga in perl che fa un po 'di magia in questo modo.manipolazione array Perl

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

percent = 50% 

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

Cioè, do un array e specifica una percentuale. E dovrebbe darmi un nuovo array con la percentuale data di valori di array originali.

dovrebbe occuparsi dei numeri dispari e darmi il soffitto o il pavimento di quel valore.

So come farlo manualmente. Mi chiedo solo se perl ha qualcosa di sorprendente in serbo?

Grazie.

risposta

3

Ogni volta che si desidera trasformare un elenco, map è una buona scommessa. Ecco un esempio:

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

print "@new"; 

uscita:

50 100 150 200 250 
+0

grazie :) questo è il roba di arrotondamento. – jerrygo

7

map consente di trasformare ogni elemento in un elenco.

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

Potrebbe essere necessario inserire un 'int()' esplicito nel mappa poiché sembra che l'interrogante voglia arrotondare. – Hudson

+0

Grazie. questa è davvero un'ottima soluzione :) – jerrygo

4

Come hai chiesto per una singola linea di perl che fa la magia, qui è:

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

questo dà

50 100 150 200 250 
+0

Grazie. Anche questo funziona :) – jerrygo