【发布时间】:2011-12-31 04:14:53
【问题描述】:
如何仅打印哈希的第一个键和元素?
我已经有一个排序的哈希,但我只想打印第一个键和相应的值 谢谢,
最后感谢大家,我将键和值推送到两个不同的@array 并打印每个数组的元素 0,它可以工作:)
【问题讨论】:
-
你的第一把钥匙是什么?
-
如果您想要一个保留添加键顺序的哈希,您可能会发现 Tie::IxHash 很有用。
如何仅打印哈希的第一个键和元素?
我已经有一个排序的哈希,但我只想打印第一个键和相应的值 谢谢,
最后感谢大家,我将键和值推送到两个不同的@array 并打印每个数组的元素 0,它可以工作:)
【问题讨论】:
哈希具有无序键。因此,哈希中没有 first key 这样的键。
但是,如果您需要首先排序的键(以获得最大键值):
my %hash = (
'foo' => 'bar',
'qux' => 'baz',
);
my ($key) = sort { $b cmp $a } keys %hash;
print "$key => $hash{$key}"; # Outputs: qux => baz
记住使用<=> 而不是cmp 进行数字排序。
【讨论】:
在 perl 哈希中,键没有排序。使用sort 函数按您想要的顺序获取键,或者您可以在创建哈希时将键推入数组中,并且您的第一个键将在数组中的第零个索引中
您可以使用下面的代码,我假设哈希名称是 my_hash,键和值是数字。如果你有字符串,你可以使用cmp 而不是<=>。有关详细信息,请参阅排序文档
获取最大密钥
foreach (sort {$b <=> $a} keys %my_hash) {
print "Keys is $_\n";
print "Value is $my_hash{$_}\n";
last;
}
获取最大值对应的key
foreach (sort {$my_hash{$b} <=> $my_hash{$a}} keys %my_hash) {
print "Keys is $_\n";
print "Value is $my_hash{$_}\n";
last;
}
【讨论】:
正如 Alan 所写 - 哈希没有特定的顺序,但您可以对哈希键进行排序:
foreach my $key (sort keys(%hash)) {
print $key . ': ' . $hash{$key} . "\n";
}
或者,如你所愿,从键数组中获取第一个元素:
my @keys = keys(%hash);
print $keys[0];
【讨论】:
foreach my $key (sort keys(%hash)) {
print "$key" . "$hash{$key}" . "\n";
last;
}
【讨论】:
对于大散列,如果您出于任何其他原因不需要排序的键,最好避免排序。
#!/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";
【讨论】: