【问题标题】:Hash Dereference in Template Toolkit模板工具包中的哈希取消引用
【发布时间】:2014-01-30 23:04:30
【问题描述】:

我有一个多维散列,我正试图在表格中打印出来。我无法正确引用/取消引用。

我正在将一个 excel 电子表格放入哈希中,我想在 html 中打印出相应的行和列,并匹配电子表格的行/列(其中一些是空的)。

我正在使用 Perl Dancer模板工具包。在服务器端,哈希工作正常。 print $big_table{$column}{$row}; 在服务器端,它打印正确的列和行,没有问题。

在客户端,0, 1, 2... 应该是列。有些列是空白的,所以我不能只打印内容。

现在它打印 ARRAY(0x3e5389c) 的方式。我尝试了一种不同的方式,它打印了 HASH...

我知道我遇到了一些引用/取消引用问题。欢迎任何建议。

服务器端代码:

my %big_table = ();

# $cell->value() is the text ripped from the excel cell at that location
$big_table{$column}{$row} = $cell->value();

template 'index', { big_table => \%big_table };

客户端:

<Table border="3">
<% FOREACH n IN big_table.0 %>

<TR><TD>&nbsp<% big_table.0.keys %>&nbsp<TD>&nbsp<% big_table.1.keys %>
&nbsp<TD>&nbsp<% big_table.2.keys %>&nbsp<TD>&nbsp<% big_table.3.keys %>
&nbsp <TD>&nbsp<% big_table.4.keys %> 
&nbsp<TD>&nbsp<% big_table.5.keys %>&nbsp

<% END %>
</Table>

提前致谢!

【问题讨论】:

  • 搞定了。从散列更改为数组。 '$big_table[$col][$row] = $cell->value();'并用所有行#填充第二个数组。客户端看起来像 &nbsp &nbsp &nbsp ... 效果很好,但它可能是疯狂的低效:(。电子表格有 800 行长,所以它是一个包含 800 个元素的第二个数组,只是为了迭代“FOREACH”循环。
  • 将您的结果发布为答案并将其标记为已接受。
  • 效率低下?!为什么你认为迭代 800 多个数组索引比 800 个哈希键效率低?
  • 没有更多或更少的效率。我的意思是我创建了一个添加了 $row 位置的附加数组,只是因为我可以使取消引用正常工作。
  • 我之前尝试过发布答案,但它不会让我这样做。我没有足够的街头信誉或其他什么......我想我等了足够长的时间,因为它现在让我。

标签: perl hash multidimensional-array dereference template-toolkit


【解决方案1】:

搞定了。

改为数组。 '$big_table[$col][$row] = $cell->value();'并用所有行 # 填充第二个数组。

客户端看起来像

<% FOREACH r IN row_numbers %>
<TR><TD> &nbsp <% big_table.0.$r %> &nbsp <TD> &nbsp <% big_table.1.$r %>...
<% END %>

效果很好,但效率可能太低了 :(。电子表格有 800 行长,所以它是一个包含 800 个元素的第二个数组,仅用于迭代“FOREACH”循环。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签