2010-07-14 5 views
5

Y a-t-il une seule ligne en perl qui fait un peu de magie comme ça.Perl array manipulation

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

percent = 50% 

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

C'est-à-dire, je donne un tableau et spécifie un pourcentage. Et il devrait me donner un nouveau tableau avec le pourcentage donné de valeurs de tableau d'origine.

devrait prendre soin des nombres impairs et me donner soit plafond ou plancher de cette valeur.

Je sais comment le faire manuellement. Je me demandais juste si perl avait quelque chose de surprenant en magasin?

Merci.

Répondre

3

Chaque fois que vous souhaitez transformer une liste, map est un bon pari. Voici un exemple:

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

print "@new"; 

Sortie:

50 100 150 200 250 
+0

merci :) qui fait les trucs d'arrondi. – jerrygo

7

map vous permettra de transformer chaque élément d'une liste.

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

Vous devrez peut-être ajouter explicitement 'int()' dans le carte car il semble que le questionneur veut arrondir. – Hudson

+0

Merci. C'est en effet une excellente solution :) – jerrygo

4

Comme vous avez demandé une seule ligne de perl qui fait la magie, la voici:

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

cela donne

50 100 150 200 250 
+0

Merci. Cela fonctionne aussi :) – jerrygo