从模板工具包中的键中查找哈希值

时间:2015-09-10 22:18:56

标签: perl template-toolkit

具有简单的哈希,用于填充选择选项。我想在价值上订购,但我无法打印钥匙......

[%- FOREACH val IN myList.values.sort -%]<option value="[%- myList.$val.key -%]">[%- val -%]</option>[% END %]

KEY无效.....我试了很多东西,但是没有用。

以便选择选项如下:

<option value="">roger1</option>

所有键和值都是唯一的。

如果我从散列中知道了值,我怎样才能获得密钥?

2 个答案:

答案 0 :(得分:3)

您可以使用pairs vmethod获取键/值对的列表,然后您可以按照所需的顺序对其进行排序。

[% myList = { first => 'ZZZ', second => 'YYY', third => 'XXX' };
   FOREACH option IN myList.pairs.sort('value') -%]
<option value="[% option.key %]">[% option.value %]</option>
[% END -%]

输出:

<option value="third">XXX</option>
<option value="second">YYY</option>
<option value="first">ZZZ</option>

答案 1 :(得分:0)

通过按值实现自定义排序,这很容易做到:

my @keys = sort { $hash{$a} cmp $hash{$b} } keys(%hash);

不幸的是,查看TT中提供的hash virtual methods,我认为没有办法在您的模板中完全执行此操作。您需要先通过上面的sort或通过反转哈希来对代码中的数据进行一点按摩:

my %inverted = reverse(%hash);

如果您反转哈希值,则可以使用TT pairs方法一次性获取键/值对的排序列表。