You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Perl获取哈希中的最大值与最小值?代码异常求助

Perl哈希求最值的问题修复

问题根源

  • 哈希键重复导致数据丢失:Perl中哈希的键具有唯一性,你定义的%timess里所有键都是TimeStamp,后续的键值对会直接覆盖前面的条目,最终哈希里只剩最后一组数据:'TimeStamp' => 129000.2323。
  • min/max函数调用错误:List::Util的max()和min()需要接收多个值或一个数组作为参数,你在循环中每次只传入单个值,自然返回该值本身。

修正方案

方案1:用数组存储时间戳(适合单类数据收集)

如果CSV里是一系列独立的TimeStamp值,直接用数组存储更合理:

#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw(min max);

# 模拟从CSV读取的时间戳列表
my @timestamps = (127000.2323, 124000.2323, 125000.2323, 128000.2323, 129000.2323);

my $maxTime = max(@timestamps);
my $minTime = min(@timestamps);
# 用%.4f保留小数位,避免%d截断小数
printf("max: %.4f, min: %.4f\n", $maxTime, $minTime);

方案2:使用唯一键的哈希(适合关联其他数据的场景)

如果需要保留每行的其他关联数据,给哈希设置唯一键(比如行号):

#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw(min max);

# 键唯一的哈希,模拟CSV每行数据
my %timess = (
    'row_1' => 127000.2323,
    'row_2' => 124000.2323,
    'row_3' => 125000.2323,
    'row_4' => 128000.2323,
    'row_5' => 129000.2323
);

# 直接传入哈希的所有值给min/max
my $maxTime = max(values %timess);
my $minTime = min(values %timess);
printf("max: %.4f, min: %.4f\n", $maxTime, $minTime);

正确输出

两种方案都会得到预期结果:

max: 129000.2323, min: 124000.2323

内容的提问来源于stack exchange,提问作者Bebe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:19:47