2011-03-08 41 views
0

我只是想讓我的頭從一個perl腳本創建一個多維數組,我目前正在轉換爲Ruby,我在Perl中有0個經驗,就像在我打開我的第一個Perl腳本今天早上。Perl到Ruby的轉換(多維數組)

這裏是原來的循環:

my $tl = {}; 

for my $zoom ($zoommin..$zoommax) { 

    my $txmin = lon2tilex($lonmin, $zoom); 
    my $txmax = lon2tilex($lonmax, $zoom); 
    # Note that y=0 is near lat=+85.0511 and y=max is near 
    # lat=-85.0511, so lat2tiley is monotonically decreasing. 
    my $tymin = lat2tiley($latmax, $zoom); 
    my $tymax = lat2tiley($latmin, $zoom); 

    my $ntx = $txmax - $txmin + 1; 
    my $nty = $tymax - $tymin + 1; 
    printf "Schedule %d (%d x %d) tiles for zoom level %d for download ...\n", 
      $ntx*$nty, $ntx, $nty, $zoom 
     unless $opt{quiet}; 
    $tl->{$zoom} = [];  

    for my $tx ($txmin..$txmax) { 
     for my $ty ($tymin..$tymax) { 
     push @{$tl->{$zoom}}, 
      { xyz => [ $tx, $ty, $zoom ] }; 
     } 
    } 

} 

和我有什麼至今紅寶石:

tl = [] 

    for zoom in zoommin..zoommax 

    txmin = cm.tiles.xtile(lonmin,zoom) 
    txmax = cm.tiles.xtile(lonmax,zoom) 

    tymin = cm.tiles.ytile(latmax,zoom) 
    tymax = cm.tiles.ytile(latmin,zoom) 

    ntx = txmax - txmin + 1 
    nty = tymax - tymin + 1 

    tl[zoom] = [] 

    for tx in txmin..txmax 
     for ty in tymin..tymax 
     tl[zoom] << xyz = [tx,ty,zoom] 
     puts tl 
     end 
    end 

    end 

我不能確定的是嵌套就在環根部的部分, push @{$tl->{$zoom}},{ xyz => [ $tx, $ty, $zoom ] };

我確信這對於一位經驗豐富的Perl程序員來說非常簡單,謝謝! `

回答

5

Perl代碼在$tl正在建立一個複雜的數據結構 - 哈希,數組,散列,數組:

$tl{$zoom}[i]{xyz}[j] = $tx  # j = 0 
$tl{$zoom}[i]{xyz}[j] = $ty  # j = 1 
$tl{$zoom}[i]{xyz}[j] = $zoom # j = 2 

所以我覺得在你的Ruby代碼重點線應該是這樣的:

tl[zoom] << { 'xzy' => [tx,ty,zoom] } 

還要注意的是根項目($tl)指的是在Perl代碼的散列,而Ruby代碼初始化它是一個數組。這種差異可能會對您造成問題,具體取決於$zoom需要的值。

+0

完美的感謝,哈希和數組的組合引​​起了我一些混淆 – Alex 2011-03-08 19:33:02

+0

Data :: Dumper是你在處理複雜結構時炒的。只要讓它建立$ tl,然後:使用Data :: Dumper;自卸車($ tl); – 2011-03-09 08:37:40