Perl:查找数组中的数字范围

SSi*_*ilk -1 sorting perl integer range

在Perl中,如果我有一个排序的整数数组,是否有一种紧凑的方法将其转换为整数范围的列表或数组?

例如,假设我有:

my @numbers=(3,4,5,6,9,10,12,14,15,16,17);
Run Code Online (Sandbox Code Playgroud)

我想要一种方法来确定存在的数字范围是:

3-6,9-10,12,14-17
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过For循环检查来查看我们是否已达到两个数组元素之间的间隙等.但在我这样做之前,我想我会看到是否有一些紧凑的符号或核心功能会做到这一点.

我不想加载任何非核心库.我正在使用Cygwin Perl 5.22.

谢谢.

ike*_*ami 6

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;
Run Code Online (Sandbox Code Playgroud)