2015-09-10 39 views
1

有简单的哈希,它被用来pupulate一个选择选项。我想订购的价值,但我不能够打印键...找到模板工具包密钥散列值

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

的关键是未来空.....我尝试了很多事情,这是行不通的。

,以便选择选项来为:

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

所有键和值是唯一的。

我怎样才能拿到钥匙,如果我知道的价值,从一个哈希?

+3

散列旨在快速提取给定键的值,而是绕过去,你将不得不通过所有的哈希的键值对迭代的其他方式。 – mob

回答

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> 
+0

谢谢。不好意思推迟了。太多的工作和混乱。 – rajeev

0

这将是很容易做到通过实施由值自定义排序:

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

不幸的是,看在hash virtual methods在TT可用,我不认为有一种方法可以在纯粹做你的模板。你需要按摩的数据一点点的代码首先,无论是通过上面的sort,或通过颠倒散:

my %inverted = reverse(%hash); 

如果颠倒散,你可以使用TT pairs方法获取排序一次性键/值对列表。

+4

如果有一种方法可以在模板中完成,请不要。这是不正确的地方,代码是完全可读变为TT可怕的,因为它是由提供显示数据准备在其他地方,而不是在。 – bytepusher

+0

同意代码一些简单的方法。控制器是一个更好的按摩数据的地方。 –