我有一個數字數組:如何從Perl中的整數列表中獲取範圍?
@numbers = 1,2,3,6,8,9,11,12,13,14,15,20
,我想打印這樣說:
1-3,6,8-9,11-15,20
有什麼想法?當然,我嘗試使用最常見的「循環」,但仍然沒有得到它。
我有一個數字數組:如何從Perl中的整數列表中獲取範圍?
@numbers = 1,2,3,6,8,9,11,12,13,14,15,20
,我想打印這樣說:
1-3,6,8-9,11-15,20
有什麼想法?當然,我嘗試使用最常見的「循環」,但仍然沒有得到它。
這裏是一個可能的方式:
@numbers = (1,2,3,6,8,9,11,12,13,14,15,20);
@list =();
$first = $last = shift @numbers;
foreach (@numbers,inf) {
if ($_ > $last+1) {
if ($first == $last) {
push @list, $first;
} elsif ($first+1 == $last) {
push @list, $first, $last;
} else {
push @list, "$first-$last";
}
$first = $_;
}
$last = $_;
}
print join ',', @list;
謝謝!有效。 :) – Suezy 2010-04-21 07:20:46
您可以使用Set::IntSpan::Fast:
use Set::IntSpan::Fast;
my @numbers = (1,2,3,6,8,9,11,12,13,14,15,20);
my $set = Set::IntSpan::Fast->new;
$set->add(@numbers);
print $set->as_string, "\n";
有*是*一個模塊的一切! – 2010-04-21 07:54:14
@numbers=sort { $a <=> $b } @numbers;
push @numbers, inf;
@p=();
$ra = shift @numbers;
$rb = $ra;
for $n (@numbers) {
if ($n > $rb +1) {
push @p, ($ra == $rb ? "$ra" : "$ra-$rb");
$ra = $n;
}
$rb = $n;
}
print join(',', @p);
爲什麼'8-9'呀?之間沒有任何關係。它不應該是'1-3,6,8,9,11-15,20'嗎?跳過的模式是什麼? – dawg 2010-04-21 05:46:52
糟糕,應該是8-9。無論如何,已經解決了..謝謝你們! :) – Suezy 2010-04-21 07:21:33