从模板工具包中的键中查找哈希值
find hash value from key in template toolkit
有简单的散列,用于填充 select 选项。我想按值排序,但无法打印键...
[%- FOREACH val IN myList.values.sort -%]<option value="[%- myList.$val.key -%]">[%- val -%]</option>[% END %]
KEY 即将失效.....我尝试了很多方法,但它不起作用。
因此 select 选项如下:
<option value="">roger1</option>
所有键和值都是唯一的。
如果我从散列中知道值,如何获取密钥?
通过按值实现自定义排序,这将很容易做到:
my @keys = sort { $hash{$a} cmp $hash{$b} } keys(%hash);
不幸的是,查看 TT 中可用的 hash virtual methods,我认为没有办法仅在您的模板中执行此操作。您首先需要通过上面的 sort
或反转散列来在代码中对数据进行一些处理:
my %inverted = reverse(%hash);
如果反转哈希,您可以使用 TT pairs 方法一次获得 key/value 对的排序列表。
您可以使用 pairs
vmethod 获取 key/value 对的列表,然后您可以将其排序为您想要的顺序。
[% 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>
有简单的散列,用于填充 select 选项。我想按值排序,但无法打印键...
[%- FOREACH val IN myList.values.sort -%]<option value="[%- myList.$val.key -%]">[%- val -%]</option>[% END %]
KEY 即将失效.....我尝试了很多方法,但它不起作用。
因此 select 选项如下:
<option value="">roger1</option>
所有键和值都是唯一的。
如果我从散列中知道值,如何获取密钥?
通过按值实现自定义排序,这将很容易做到:
my @keys = sort { $hash{$a} cmp $hash{$b} } keys(%hash);
不幸的是,查看 TT 中可用的 hash virtual methods,我认为没有办法仅在您的模板中执行此操作。您首先需要通过上面的 sort
或反转散列来在代码中对数据进行一些处理:
my %inverted = reverse(%hash);
如果反转哈希,您可以使用 TT pairs 方法一次获得 key/value 对的排序列表。
您可以使用 pairs
vmethod 获取 key/value 对的列表,然后您可以将其排序为您想要的顺序。
[% 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>