2013-06-19 3 views
2

입력 날짜보다 이전이거나 입력 날짜를 사용하는 배열에서 가장 가까운 날짜를 얻으려면 어떻게해야합니까?Perl 배열에 가장 가까운 날짜 찾기

예를 들어, 내 배열은 다음과 같습니다.

@dates = ("200811","200905","200912","201005","201202"); 

내 입력 날짜 내가 "200912"입니다 배열에 가장 가까운 날짜를 얻는 방법

$inputdate = "201003"; 

입니다.

날짜 형식은 YEARMM입니다.

감사

답변

4

정렬 날짜 마지막으로 이러한 일을 입력 날짜 이전에만 사람을 선택

더 펄보다는 PHP ...
-2

여기에 논리 월 월의 경우, 1 월부터 12 월까지 한 백 년 변화의 달 이동, 그렇지 않으면 같은 해에 한 달에 돌아 가야하는 것입니다. 내가 Perl로 많은 코드를하지 않는

은, PHP의 코드는 다음과 같습니다 (내가 여기에 퍼팅하고있어 당신에게 논리를 제공하는 것이 사소한해야 코딩.)

$dates = array("200811","200905","200912","201005","201202"); 
$inputdate = "201003"; 
$date = $inputdate; 
while ($found==0) { 
    if (in_array($date, $dates)) { 
     $found = 1; 
     echo "the date is " . $date; 
    } 
    if ($date%100==1) { // if it's january, we need to change to december of the previous year 
     $date = $date - 100 + 12; 
    } 
    else { 
     $date = $date - 1; //go one month back in the same year 
    } 
} 
+0

, 나는 태그를 보지 못했다. 지금 내 대답을 편집하겠습니다. – Demnogonis

+0

젠장처럼 보이는

print ((grep $_ <= $inputdate, sort @dates)[-1]); 

+0

그건 끔찍한 접근입니다. 여러 번 날짜 배열을 여러 번 반복 할 수 있습니다 (예제에서는 4 개이지만 한 번만 필요할 때 쉽게 여러 개가 될 수 있습니다). 이전 날짜가 없으면 배열을 수십억 번 반복 할 수도 있습니다. – ikegami

2
use List::Util qw(max); 
my $date = max grep { $_ <= $inputdate } @dates;