-4

私は次のものを持っていますDictionary<string,string>

bool hasContinuousDays = false;

var selectedDates = new Dictionary<string, string>();
selectedDates.Add("2014-06-21", DateTime.Now.ToString());
selectedDates.Add("2014-06-22", DateTime.Now.AddDays(1).ToString());
selectedDates.Add("2014-06-23", DateTime.Now.AddDays(2).ToString());
selectedDates.Add("2014-06-24", DateTime.Now.AddDays(3).ToString());

上記の要素には連続した日 (6,7,8,9) があるのでhasContinuousDays = true.

var selectedDates = new Dictionary<string, string>();
    selectedDates.Add("2014-06-21", DateTime.Now.ToString());
    selectedDates.Add("2014-06-24", DateTime.Now.AddDays(1).ToString());
    selectedDates.Add("2014-06-25", DateTime.Now.AddDays(3).ToString());
    selectedDates.Add("2014-06-26", DateTime.Now.AddDays(4).ToString());

上記の要素には、連続していない日があるのでhasContinuousDays = false.

DateTimeディクショナリに連続した'sがあるかどうかを確認するにはどうすればよいですか? (キーではなく)値を使用して検証する必要があります。

アドバイスをいただければ幸いです。

4

3 に答える 3

2

これを行う機能的な方法を次に示します。Dictionary<string,DateTime>(あなたが持っているべきです)が与えられた場合、次のことができます:

  1. 値のコレクションを取得する
  2. コレクションを末尾で圧縮すると、連続するすべての日付のペアのリストが得られます
  3. すべてのペアが正確に 1 日離れていることを確認します

    var dates = selectedDates.Values;
    
    dates.OrderBy(d => d)
         .Zip(dates.Skip(1), Tuple.Create)
         .All(pair => (pair.Item2 - pair.Item1).Days == 1);
    
于 2014-07-28T14:52:16.783 に答える
1
bool hasContinuousDays = false;

var selectedDates = new Dictionary<string, string>();
selectedDates.Add("2014-06-21", DateTime.Now.ToString());
selectedDates.Add("2014-06-22", DateTime.Now.AddDays(1).ToString());
selectedDates.Add("2014-06-23", DateTime.Now.AddDays(2).ToString());
selectedDates.Add("2014-06-24", DateTime.Now.AddDays(3).ToString());

DateTime lastDay = DateTime.Parse(selectedDates.Values.First());
hasContinuousDays = selectedDates.Values.Skip(1).All(
        str=> {
                var day = DateTime.Parse(str); 
                var b = day == lastDay.AddDays(1); 
                lastDay = day; 
                return b;
            });

hasContinuousDays .Dump();  
于 2014-07-28T14:43:19.897 に答える