2010-07-14 52 views
5

Có một dòng duy nhất trong perl thực hiện một số phép thuật như thế này không.Thao tác mảng Perl

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

percent = 50% 

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

Tức là, tôi đưa ra một mảng và chỉ định phần trăm. Và nó sẽ cho tôi một mảng mới với phần trăm cho trước của các giá trị mảng ban đầu.

nên xử lý các số lẻ và cho tôi giá trần hoặc sàn của giá trị đó.

Tôi biết cách thực hiện thủ công. Chỉ cần tự hỏi nếu perl có một cái gì đó đáng ngạc nhiên trong cửa hàng?

Cảm ơn bạn.

Trả lời

3

Bất cứ khi nào bạn muốn chuyển đổi danh sách, map là một cược tốt. Dưới đây là một ví dụ:

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

print "@new"; 

Output:

50 100 150 200 250 
+0

cảm ơn :) mà làm các công cụ làm tròn. – jerrygo

7

map sẽ cho phép bạn chuyển đổi mọi mục trong danh sách.

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

Bạn có thể cần phải ném vào một 'int()' rõ ràng trong bản đồ vì có vẻ như người hỏi muốn làm tròn. – Hudson

+0

Cảm ơn. đó thực sự là một giải pháp tuyệt vời :) – jerrygo

4

Như bạn hỏi cho một dòng duy nhất của perl mà không sự kỳ diệu, ở đây nó là:

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

này cung cấp cho

50 100 150 200 250 
+0

Cảm ơn bạn. Điều đó cũng hoạt động :) – jerrygo