我写了一些Perl代码,用于搜索哈希中的最高键值对,其中键是文本,值是数字:
my $o_val = 0; # FOR TRACKING HIGHEST VALUE ENCOUNTERED IN THE LOOP
my $o_key; # FOR TRACKING CORRESPONDING KEY TO THE HIGHEST VALUE
while ( my ($key, $val) = each(%NG) ) {
if ( $val > $o_val ) {
$o_val = $val;
$o_key = $key;
}
}
print "$okey\n";
Run Code Online (Sandbox Code Playgroud)
问题在于它没有考虑到最高价值并列的可能性.如果我的测量变量可能随着循环的每次迭代而发生变化,那么如何捕获所有与最高值相关的键值对?
我有一个想法,我可以编写另一个while循环来运行相同的哈希值,然后将$ o_val建立为最高值,然后将每个键配对到$ o_val推入另一个数组,例如:
my @highest; # ARRAY OF HIGHEST-VALUE KEYS
while ( my ($key, $val) = each(%NG) ) {
if ( $val == $o_val ) { push(@highest, $key); }
}
Run Code Online (Sandbox Code Playgroud)
但这似乎有点低效.我希望有一些我不知道的Perl命令会让我在没有循环的情况下识别散列中的最高值,所以我可以在我的问题中使用第二段代码.
您可以使用数组来保持键的最高价值,
if ( $val > $o_val ) {
$o_val = $val;
@o_keys = $key;
}
elsif ($val == $o_val) {
push(@o_keys, $key);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |