如何用Perl将MySQL查询的离散ID序列压缩为连续区间格式?
Perl实现离散ID序列的压缩格式化
以下是直接可用的Perl代码,能把逗号分隔的ID列表转换成1001..3000、10675这类格式:
# 假设从数据库获取到的ID字符串 my $id_list = '1001,1002,1003,...,3000,10500,10675,100000'; # 拆分字符串为数组并做数值排序(ID可能乱序,排序是合并连续区间的前提) my @ids = sort { $a <=> $b } split /,/, $id_list; my @result; my ($start, $prev); foreach my $id (@ids) { if (!defined $start) { $start = $prev = $id; next; } # 当前ID和前一个连续,更新结束值 if ($id == $prev + 1) { $prev = $id; } else { # 遇到断档,将当前区间存入结果 push @result, $start == $prev ? $start : "$start..$prev"; $start = $prev = $id; } } # 处理最后一个未写入的区间 push @result, $start == $prev ? $start : "$start..$prev" if defined $start; # 用中文顿号拼接成最终格式化字符串 my $formatted = join '、', @result; print $formatted;
关键说明:
- 必须做数值排序:因为你提到ID存在乱序情况(比如100000跳至10500),只有排序后才能正确识别连续序列
- 遍历过程中跟踪连续区间的起始和结束值,遇到非连续ID就输出当前区间
- 最终用中文顿号拼接结果,完全匹配你需要的格式
内容的提问来源于stack exchange,提问作者ScoobaQueef
相关产品推荐
相关产品推荐

