2011-03-08 44 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