2013-02-27 7 views
-1

Я уже задал другой вопрос относительно Sorting Date Time и получил помощь от другого пользователя для передачи моих значений. Я использую цикл for, как показано ниже, но определенно неправильно здесь, потому что код приносит значение один за другим, а не сортировку.Отсортировать время по дате публикации

public class Break 
{ 
    public DateTime MealStart { get; set; } 
    public DateTime MealEnd { get; set; } 
} 

мой основной класс

IList<DateTime> starts = new List<DateTime>(); 
IList<DateTime> ends = new List<DateTime>(); 
DateTime breakStart1 = new DateTime(2012, 02, 15, 12, 30, 00); // 15/02/12 12.30PM 
DateTime breakEnd1 = new DateTime(2012, 02, 15, 13, 30, 00); // 15/02/12 01.30PM 
DateTime breakStart2 = new DateTime(2012, 02, 15, 11, 00, 00); // 15/02/12 11.00AM 
DateTime breakEnd2 = new DateTime(2012, 02, 15, 12, 00, 00); // 15/02/12 12.00PM 
DateTime breakStart3 = new DateTime(2012, 02, 15, 12, 00, 00); // 15/02/12 12.00PM 
DateTime breakEnd3 = new DateTime(2012, 02, 15, 01, 00, 00); // 15/02/12 01.00PM 
starts.Add(breakStart1); 
starts.Add(breakStart2); 
starts.Add(breakStart3); 
ends.Add(breakEnd1); 
ends.Add(breakEnd2); 
ends.Add(breakEnd3); 
for (int i = 0; i < starts.Count; i++) 
{ 
    var breaks = new List<Break>() 
    { 
     //for (int j= 0; j<starts.Count; j++) 
     //{ 
     new Break() 
     { 
      MealStart = starts[i], 
      MealEnd = ends[i] 

     } 
     // } 
    }; 

    var ordered = breaks.OrderBy(s => s.MealStart); 
    foreach (var ord in ordered) 
    { 
     System.Console.WriteLine(ord.MealStart); 
     System.Console.WriteLine(ord.MealEnd); 
    } 
} 

Я ожидаю результат как ниже

breakStart1 = 15/02/12 11.00AM 
breakEnd1= 15/02/12 12.00PM 
breakStart2 = 15/02/12 12.00PM 
breakEnd2= 15/02/12 01.00PM 
breakStart3 = 15/02/12 12.30PM 
breakEnd3= 15/02/12 01.30PM 

, но это не потому, что для цикла.

+2

Я не сделал этого, я думаю, что это может создать цепную реакцию, которая может закончиться тем, что вы обладаете незаурядной репутацией. чувак, что ты пытаешься сделать точно? (ТОЧНО!) –

+0

@GY, я точно пытаюсь сделать то, что Corylulu отправил ответ, благодаря всем – Usher

+0

@Usher. Редактированный вопрос не заслуживает нисходящих прогнозов, он показывает примеры кода и объясняет его проблему (и исправил сломанный английский он опубликовал ранее: P). Поэтому я буду поддерживать вас, чтобы противостоять вашим негативным вниз. – Corylulu

ответ

3

Вы создаете breaks после истории цикла, что вам нужно сделать это вне цикла, как это:

IList<DateTime> starts = new List<DateTime>(); 
IList<DateTime> ends = new List<DateTime>(); 
DateTime breakStart1 = new DateTime(2012, 02, 15, 12, 30, 00); // 15/02/12 12.30PM 
DateTime breakEnd1 = new DateTime(2012, 02, 15, 13, 30, 00); // 15/02/12 01.30PM 
DateTime breakStart2 = new DateTime(2012, 02, 15, 11, 00, 00); // 15/02/12 11.00AM 
DateTime breakEnd2 = new DateTime(2012, 02, 15, 12, 00, 00); // 15/02/12 12.00PM 
DateTime breakStart3 = new DateTime(2012, 02, 15, 12, 00, 00); // 15/02/12 12.00PM 
DateTime breakEnd3 = new DateTime(2012, 02, 15, 01, 00, 00); // 15/02/12 01.00PM 
starts.Add(breakStart1); 
starts.Add(breakStart2); 
starts.Add(breakStart3); 
ends.Add(breakEnd1); 
ends.Add(breakEnd2); 
ends.Add(breakEnd3); 
List<Break> breaks = new List<Break>(); 
for (int i = 0; i < starts.Count; i++) 
{ 
    breaks.Add(new Break() 
    { 
     MealStart = starts[i], 
     MealEnd = ends[i] 
    }); 
} 
var ordered = breaks.OrderBy(s => s.MealStart); 
foreach (var ord in ordered) 
{ 
    System.Console.WriteLine(ord.MealStart); 
    System.Console.WriteLine(ord.MealEnd); 
} 
+0

Ударьте мне: P – Corey

+0

@Corylulu, Спасибо тонну – Usher

+0

@Usher Нет проблем. Просто помните, чтобы быть ясным и здесь. Предоставьте весь код, который вы можете, в его самой простой, наиболее изолированной форме (желательно что-то проверяемое). И всегда помните, чтобы выбрать лучший ответ: P – Corylulu

2

С @Corylulu бил меня на удар по основному вопросу, вот другой метод, который немного короче:

IEnumerable<Break> breaks = 
    starts.Zip(ends, (s, e) => new Break { MealStart = s, MealEnd = e }) 
    .OrderBy(b => b.MealStart); 

foreach (Break brk in breaks) 
    Console.WriteLine("Start: {0}\tEnd: {1}", brk.BreakStart, brk.BreakEnd); 

IEnumerable.Zip метод принимает пару IEnumerable с и функции преобразования и выдает выходной сигнал IEnumerable, содержащий результаты вызова функции преобразования с членами каждого входа IEnumerable. Вы можете преобразовать его в List<Break> с ToList() в конце курса.

Смежные вопросы