날짜 배열에 아래 값이 있습니다 : "07/07/2011", "08/05/2011", "09/07/2011", "12/07/2011"컬렉션에서 누락 날짜 찾기
이 코드를 C# 프로그램의 입력으로 사용하면 날짜가 누락 된 새 모음집을 만들어야합니다. 2011 년 10 월 7 일, 11/07/2011
재귀가이를 수행하는 가장 좋은 방법입니까?
감사합니다.
날짜 배열에 아래 값이 있습니다 : "07/07/2011", "08/05/2011", "09/07/2011", "12/07/2011"컬렉션에서 누락 날짜 찾기
이 코드를 C# 프로그램의 입력으로 사용하면 날짜가 누락 된 새 모음집을 만들어야합니다. 2011 년 10 월 7 일, 11/07/2011
재귀가이를 수행하는 가장 좋은 방법입니까?
감사합니다.
전혀 아님. 이것은 간단한 과정이어야합니다. 시작 날짜가 있고 간격이 ... 배열을 걷기 시작하고 다음 값이 이전 값과 간격을 더한 값과 일치하지 않으면 새 배열에 새 값을 삽입합니다. 일치하는 경우 해당 값을 복사합니다. 그런 다음 날짜와 어떤 메타 데이터를 유용을 보유하고 클래스를 만들고 각 항목에 대한 더 많은 데이터 (메타 데이터)이 필요한 경우
(예를 들어, 부울 같은 this_value_was_inserted_artificially)
불필요하게 일을 복잡하게 할 재귀를 사용.
재귀가 필요하지 않습니다. 이것은 아마도 최적화 할 수 있지만, 작업을 수행해야합니다
public static IEnumerable<DateTime> FindMissingDates(IEnumerable<DateTime> input)
{
// get the range of dates to check
DateTime from = input.Min();
DateTime to = input.Max();
// how many days?
int numberOfDays = to.Subtract(from).Days;
// create an IEnumerable<DateTime> for all dates in the range
IEnumerable<DateTime> allDates = Enumerable.Range(0, numberOfDays)
.Select(n => from.AddDays(n));
// return all dates, except those found in the input
return allDates.Except(input);
}
OP가 * months *의 간격을 찾고있는 것처럼 보입니다. –
@Dan Tao : 미국인인지 아닌지에 따라 다릅니다. –
전혀 신경 쓰지 않아, 내가 미국에있는 것을 잊어 버렸다. 우리가 우리의 연대기를 뒤에서 적어 둔다.) –
당신은 Linq에 매우 잘이 해낼 수 있습니다
var dates=new[]{
DateTime.Parse("07/07/2011"),
DateTime.Parse("08/07/2011"),
DateTime.Parse("09/07/2011"),
DateTime.Parse("12/07/2011")};
var days=(dates.Max()-dates.Min()).Days;
var otherDays=
Enumerable
.Range(0,days)
.Select(d=>dates.Min().AddDays(d))
.Except(dates);
재귀는 종종 대답하지 않습니다. 그러나 질문에 대해서는, 1) "08/05/2011"은 "08/07/2011"이어야합니까? 2) 당신이 제공 한 날짜와 누락 된 날짜에 대한 월별 간격이 있듯이 암시 패턴이 실제 패턴입니까? –
아이디어를 얻으려면 다음 질문을 참조하십시오. http://stackoverflow.com/search?q=missing+dates+%5Bc%23%5D –
문자열이나 날짜 시간으로 저장하고 있습니까? –