Perl:如果所有条目都相等,则检查哈希值,从哈希中获取任意/随机密钥

时间:2015-04-29 10:58:41

标签: perl hash comparison

目标:我想检查哈希中的所有条目是否以某种方式相等(此处为计数)。

我讨厌的解决方案:

# initialize some fake data
my @list1 = (2, 3);
my @list2 = (1, 2);
my %hash = (12 => \@list1, 22 => \@list2);
# here starts the quest for the key
my $key;
foreach my $a (keys %hash) {
  $key = $a;
}
# some $key is set
# here starts the actual comparision
my $count = scalar(@{%hash{$key}});
foreach my $arr_ref (%hash) {
  my $actcount = scalar(@$arr_ref);
  print "some warning" if $actcount != $count;
}

我知道我也可以在循环的第一次迭代中存储大小,然后我不需要提前获取密钥。但它会在每次迭代中引起一个条件语句。因此我喜欢避免它。

问题: 从哈希中获取密钥的正确方法是什么?

增加: 应该有可能像 (键%哈希)[0]

1 个答案:

答案 0 :(得分:1)

my ($key) = keys %hash; 应该可以工作,或者您可以通过将您指定的标量括在括号中来强制列表上下文:

each

另一种方法是在标量上下文中使用my $key = each %hash;

for my $arr_ref (values %hash) {

在测试循环中,您只对值感兴趣,所以不要迭代键:

success: function( json ) {
   $.each(items, function (i, item) {
       $('#mySelect').append($('<option>', { 
           value: item.value,
           text : item.text 
       }));
   )};
}