2010-07-14 6 views
5

Gibt es eine einzelne Zeile in Perl, die so etwas zaubert?Perl-Array-Manipulation

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

percent = 50% 

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

Das heißt, ich gebe ein Array und einen Prozent angeben. Und es sollte mir ein neues Array mit dem angegebenen Prozent der ursprünglichen Array-Werte geben.

sollte auf ungerade Zahlen achten und geben Sie mir entweder Decke oder Boden dieses Wertes.

Ich weiß, wie man es manuell macht. Ich frage mich, ob Perl etwas Überraschendes bereithält.

Vielen Dank.

Antwort

3

Jedes Mal, wenn Sie eine Liste verwandeln, ist map eine gute Wette. Hier ein Beispiel:

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

print "@new"; 

Ausgang:

50 100 150 200 250 
+0

danke :) das macht das rundungskram. – jerrygo

7

map können Sie alle Elemente in einer Liste transformieren.

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

Sie müssen möglicherweise eine explizite 'int()' in der Karte, da es sich anhört, als ob der Fragesteller Runden möchte. – Hudson

+0

Danke. das ist in der tat eine tolle lösung :) – jerrygo

4

Wie Sie für eine einzelne Zeile von Perl gefragt, die die Magie tut, hier ist es:

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

das gibt

50 100 150 200 250 
+0

Danke. Das klappt auch :) – jerrygo