2011-07-15 35 views
1

我有大約1000條記錄的數組,每個記錄是具有這些屬性的對象:計數相鄰日期在陣列

 
- Result 
    + Number: Integer (can repeat, not an ID) 
    + Date: DateTime 

我想算並獲得最具有相鄰日期結果的。
任何人都可以提供任何想法?

編輯: 例如:

I have an array: 
List<Result> results = new List<Result> { 
    new Result(){ Number = 34, Date = "7/15/2011" }, 
    new Result(){ Number = 59, Date = "7/15/2011" }, 
    new Result(){ Number = 11, Date = "7/15/2011" }, 

    new Result(){ Number = 1, Date = "7/16/2011" }, 
    new Result(){ Number = 3, Date = "7/16/2011" }, 
    new Result(){ Number = 34, Date = "7/16/2011" }, 

    new Result(){ Number = 98, Date = "7/17/2011" }, 
    new Result(){ Number = 34, Date = "7/17/2011" }, 
    new Result(){ Number = 29, Date = "7/17/2011" }, 
    new Result(){ Number = 99, Date = "7/17/2011" }, 
    new Result(){ Number = 1, Date = "7/17/2011" }, 

    new Result(){ Number = 31, Date = "7/18/2011" }, 
    new Result(){ Number = 76, Date = "7/18/2011" }, 
    new Result(){ Number = 47, Date = "7/18/2011" }, 
    new Result(){ Number = 34, Date = "7/18/2011" }, 

    new Result(){ Number = 99, Date = "7/19/2011" }, 
    new Result(){ Number = 0, Date = "7/19/2011" }, 
    new Result(){ Number = 88, Date = "7/19/2011" }, 
    new Result(){ Number = 33, Date = "7/19/2011" } 
}; 

As you see, all i want is to get: 
- Number = 34 with 4 adjacent days 
- Number = 1 with 2 adjacent days 
+0

靠近你的意思,對於某些日期時間參數,你想datetime + 1 -1天結果? –

+0

您的英文很好,但請注意我已更改的格式和標題以反映您的真實問題。 –

+0

@Aseem Gautam:我的意思是日期+1天相鄰 –

回答

1
var HighestAdjacentDate = 
    Results.OrderByDescending(Result => 
     Results.Count(R => 
      Math.Abs((R.Date - Result.Date).Days) == 1)).FirstOrDefault(); 
+0

那麼約3或4個日期是相鄰的?我想要數它們並採取最多 –

+0

這就是orderby的意思。它將按相鄰日期的數量排序,然後返回第一個(大多數日期相鄰)。 –

+0

@Goerge:我剛編輯過這個問題 –

0

假設,爲了簡潔,有序輸入

var sample = new [] { 
    new { Number = 1, Date = DateTime.Now }, 
    new { Number = 2, Date = DateTime.Now.AddDays(5) }, 
    new { Number = 3, Date = DateTime.Now.AddDays(6) }, 
    new { Number = 4, Date = DateTime.Now.AddDays(9) } 
}; 

var adjacent = sample 
    .Where((o,i) => i>0 && (o.Date.Date - sample[i-1].Date.Date).Days<=1); 

Console.WriteLine(string.Join("\n", adjacent)); 

對於這個特定的輸入顯示

H:\>csharp test.cs 
{ Number = 3, Date = 7/21/2011 12:19:44 PM } 
+0

我剛編輯過這個問題 –