如果列表有多个连续月份条,则返回true

本文关键字:返回 true 列表 连续 如果 | 更新日期: 2023-09-27 18:18:53

我正在工作的C# list类型为DateTime,其中有几行dd/mm/yyyy格式的数据,我正试图找出一种方法,如果以下三个条件之一是true,则返回true

  1. 如果所有列表项相等。月份和年份相等,这很简单
  2. 如果按月和年顺序排列。

例子:

10/4/2016  
10/3/2016   
10/2/2016   
10/1/2016   
10/12/2015

在上面,Month and Year是顺序的,所以该方法返回true

3。如果列表中有多个按顺序排列的月份

例子:

10/2/2016   
10/1/2016   
10/12/2015
10/2/2016   
10/1/2016   
10/12/2015
10/2/2016   
10/1/2016   
10/12/2015

在上面的列表中,它有三个连续月份12/2015,1/2016,2/2016条。因此,对于上面的列表,它应该返回true。它应该返回false,即使一个月没有顺序

我能够为第二个条件编写一个方法,其中dd/yyyy应该按顺序使用以下方法

for (var x = 1; x < terms.Count; ++x)
    {
        var d1 = terms[x - 1];
        var d2 = terms[x];

        if (d2.Year == d1.Year)
        {
            if ((d1.Month - d2.Month) != 1) return false;
            continue;
        }                              
        if ((d1.Year - d2.Year) != 1) return false;
        if (d1.Month != 1 || d2.Month != 12) return false;
    }
    return true;

是否有类似的方法来检查第三个条件?

如果列表有多个连续月份条,则返回true

我不会使用月和年,但可以考虑添加时间。

DateTime currentDateTime;
foreach(var d in terms)
{
  if(currentDateTime == default(DateTime))
  {
    currentDateTime = d;
  }
  else
  {
    currentDateTime = currentDateTime.AddMonths(1);
    if(currentDateTime != d) return false;
  }
}
return true;

对于相同序列的重复(这次是伪代码):

// Determine initial sequence
while(currentDateTime.AddMonths(1) == nextDateTime) count++;
// Make sure that the whole sequence is a multiple of the short sequence
if(totalLength % count != 0) return false;
// Check remaining sequences
for(iteration in 1 .. totalLength / count)
  for(index in 1 .. count)
    if(terms[index] != terms[count * iteration + index]) return false;
// No elements differed
return true;