Ale*_*lex 0 ruby perl multidimensional-array
我只是试图从我正在转换为Ruby的perl脚本开始创建多维数组,我在Perl中有0次经验,就像我今天早上打开我的第一个Perl脚本一样.
这是原始循环:
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 ] };
}
}
}
Run Code Online (Sandbox Code Playgroud)
以及我目前在Ruby中所拥有的内容:
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
Run Code Online (Sandbox Code Playgroud)
我不确定的部分是嵌套在循环的根部, push @{$tl->{$zoom}},{ xyz => [ $tx, $ty, $zoom ] };
我相信对于经验丰富的Perl程序员来说这很简单,谢谢!`
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
Run Code Online (Sandbox Code Playgroud)
所以我认为Ruby代码中的关键字应该是这样的:
tl[zoom] << { 'xzy' => [tx,ty,zoom] }
Run Code Online (Sandbox Code Playgroud)
另请注意,根item($tl)引用Perl代码中的哈希,而Ruby代码将其初始化为数组.这种差异可能会给您带来问题,具体取决于所需的值$zoom.
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |