如何只打印哈希的第一个键和元素?
我已经有一个已排序的哈希,但我想只打印第一个键和相应的值 感谢,
感谢大家最后我将键和值推送到两个不同的@array和每个数组的打印元素0并且它可以工作:)
答案 0 :(得分:8)
哈希有无序键。因此,散列中没有第一个键这样的键。
但是,如果您需要首先排序的密钥(最大密钥值):
my %hash = (
'foo' => 'bar',
'qux' => 'baz',
);
my ($key) = sort { $b cmp $a } keys %hash;
print "$key => $hash{$key}"; # Outputs: qux => baz
请务必使用<=>
代替cmp
进行数字排序。
答案 1 :(得分:5)
在perl哈希中没有键的排序。使用sort函数以您想要的顺序获取键,或者您可以在创建哈希时将键推入数组,并且第一个键将位于数组中的第零个索引
你可以使用下面的代码,我假设哈希名称是my_hash,键和值是数字。如果您有字符串,则可以使用cmp
代替<=>
。有关更多详细信息,请参阅排序文档
获取最大密钥
foreach (sort {$b <=> $a} keys %my_hash) {
print "Keys is $_\n";
print "Value is $my_hash{$_}\n";
last;
}
获取与最大值对应的键
foreach (sort {$my_hash{$b} <=> $my_hash{$a}} keys %my_hash) {
print "Keys is $_\n";
print "Value is $my_hash{$_}\n";
last;
}
答案 2 :(得分:0)
就像艾伦写的那样 - 哈希没有特定的顺序,但你可以对哈希键进行排序:
foreach my $key (sort keys(%hash)) {
print $key . ': ' . $hash{$key} . "\n";
}
或者,如你所愿,从keys数组中获取第一个元素:
my @keys = keys(%hash);
print $keys[0];
答案 3 :(得分:0)
foreach my $key (sort keys(%hash)) {
print "$key" . "$hash{$key}" . "\n";
last;
}
答案 4 :(得分:0)
对于大型哈希,如果由于任何其他原因不需要排序键,最好避免排序。
#!/usr/bin/env perl
use strict; use warnings;
my %hash = map { $_ => rand(10_000) } 'aa' .. 'zz';
my ($argmax, $max) = each %hash;
keys %hash; # reset iterator
while (my ($k, $v) = each %hash) {
if ($v >= $max) {
$max = $v;
$argmax = $k;
}
}
print "$argmax => $max\n";
如果您打算进行排序,则只需要具有最大值的键,而不是keys
和values
的整个数组:
#!/usr/bin/env perl
use strict; use warnings;
my %hash = map { $_ => rand(10_000) } 'aa' .. 'zz';
my ($argmax) = sort { $hash{$b} <=> $hash{$a} } keys %hash;
print "$argmax => $hash{$argmax}\n";