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



具有简单的散列,用于填充选择选项。我想按值订购它,但是我无法打印密钥…

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

KEY来了null.....我试了很多方法,但都不管用。

这样select选项就会出现:

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

所有的键和值都是唯一的。

如果我知道哈希值,我怎么能得到键?

您可以使用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>

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

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

不幸的是,查看TT中可用的散列虚拟方法,我认为没有一种方法可以完全在模板中做到这一点。首先,您需要在代码中稍微处理一下数据,可以通过上面的sort,也可以通过反转哈希:

my %inverted = reverse(%hash);

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

最新更新