我需要Perl中的map函數的一些幫助,它似乎對我的數組進行了細分。Perl映射函數沒有按預期工作
#!/usr/bin/perl
use Math::Trig;
my @Degre = map {rand(360)} (1..2000);
my @step= map {rand(.5)} (1..2000);
my @aa = map {rand(2000)} (1..2000);
my @bb = map {rand(2000)} (1..2000);
for ($i = 0; $i <=100; $i++)
{
my @xx = map {$aa[$_]*(cos($Degre[$_])*(pi/180))}(1..2000);
my @yy = map {$bb[$_]*(cos($Degre[$_])*(pi/180))}(1..2000);
@Degre = map {@Degre[$_] + @step[$_]} (1..2000);
print "@bb[1] @aa[1] @Degre[1] @step[1] \n";
}
現在出來就把這給
1146.56471948439 1909.33326800968 329.443529905881 0.117635819122725
1146.56471948439 1909.33326800968 343.482356802257 0.117635819122725
1146.56471948439 1909.33326800968 164.500200570578 0.117635819122725
1146.56471948439 1909.33326800968 252.734665366625 0.117635819122725
1146.56471948439 1909.33326800968 274.983382178209 0.117635819122725
1146.56471948439 1909.33326800968 324.609187610893 0.117635819122725
1146.56471948439 1909.33326800968 261.96207333817 0.117635819122725
1146.56471948439 1909.33326800968 279.442105351764 0.117635819122725
隨着第三列是度,我不明白爲什麼它似乎隨機左右時,我預期它在0.117635增加跳躍。 .... 腳步?
乾杯
UPDATE
爲了證實我試圖獲取地圖statment做以下
for ($x = 0; $x <=2000; $x++)
{
$degre[$x] = $degre[$x] + $step[$i]
}
改變代碼
for ($i = 0; $i <=100; $i++)
{
my @xx = map {$aa[$_]*(cos($Degre[$_])*(pi/180))}(1..2000);
my @yy = map {$bb[$_]*(cos($Degre[$_])*(pi/180))}(1..2000);
#@Degre = map {$Degre[$_] + $step[$_]} (1..2000);
for ($x = 0; $x <=2000; $x++)
{
$Degre[$x] = $Degre[$x] + $step[$x];
}
提供了以下出來把
738.346205775827 646.171091419262 395.07480695473 0.484472140779317
738.346205775827 646.171091419262 395.559279095509 0.484472140779317
738.346205775827 646.171091419262 396.043751236288 0.484472140779317
738.346205775827 646.171091419262 396.528223377068 0.484472140779317
738.346205775827 646.171091419262 397.012695517847 0.484472140779317
738.346205775827 646.171091419262 397.497167658626 0.484472140779317
738.346205775827 646.171091419262 397.981639799406 0.484472140779317
738.346205775827 646.171091419262 398.466111940185 0.484472140779317
正如您可以看到度數列現在每次認爲循環通過步長值正確遞增。那麼爲什麼地圖不這樣做。
有一個問題line「@Degre = map {$ Degre [$ _] + $ step [$ _]}(1..2000);」超過原始數組值?或添加到數組? – DevilWAH 2012-08-08 23:02:05
順便說一下,'map {}(1..2000)'是一種效率低下的做事方式,因爲它創建了一個由數字1到2000填充的2000元素的數組。for循環做同樣的事情會更有效率:'$ Degre [$ _] + = $ step [$ _](1..2000)' – dan1111 2012-08-09 14:06:59
當我測試了一個for循環(使用上面我的問題中的代碼)。和長凳標記它反對使用「地圖」它顯着慢。我會再次嘗試使用您建議的代碼。乾杯:) – DevilWAH 2012-08-10 20:33:02