在 Perl 中,如果我有一个排序的整数数组,是否有一种紧凑的方法可以将其转换为整数范围的列表或数组?
例如,假设我有:
my @numbers=(3,4,5,6,9,10,12,14,15,16,17);
我想要一种方法来确定存在的数字范围是:
3-6,9-10,12,14-17
我知道我可以通过 For 循环检查来检查它是否在两个数组元素之间出现间隙等。但在我这样做之前,我想我会看看是否有一些紧凑的符号或核心功能会做到这一点。
我宁愿不必加载任何非核心库。我正在使用 Cygwin Perl 5.22。
谢谢。
my @ranges;
for (@numbers) {
if (@ranges && $_ == $ranges[-1][1]+1) {
++$ranges[-1][1];
} else {
push @ranges, [ $_, $_ ];
}
}
say join ',', map { $_->[0] == $_->[1] ? $_->[0] : "$_->[0]-$_->[1]" } @ranges;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句