假设我有一系列具有一系列开始时间的电影
public class Show
{
public string Name { get; set; }
public DateTime Start { get; set; }
}
电影1 - 8:00
电影1 - 10:00
电影1 - 12:00
电影2 - 9:00
电影2 - 11:30
电影2 - 15:00
电影3 - 12:00
电影3 - 13:00
我最终得到了一个分组列表,其中电影的名称是关键。我想从每个小组中抽出一次,然后创建一个List<DateTime>
。
既然有3个项目有8次,我应该有18个不同的列表。
8:00 - 9:00 - 12:00
8:00-9:00-13:00
10:00-9:00-12:00
等
我尝试循环浏览群组
foreach (var movie in movies)
{
foreach (var time in movie)
{
// Start looping through other groups and movies
}
}
无论如何,这可能是一个糟糕的解决方案,或者我没有做正确的事情,因为我最终得到了List<DateTime>
的列表,我不得不开始循环遍历这些列表来构建更多列表,只需从中获取一个项目每个...这太可怕了。常规嵌套foreach
将无法正常工作,因为我最终得到了我的8:00电影1,其中包含了电影2和电影2的所有实例。 3,所以我不得不将这些名单分开,这样就太乱了。
有什么建议可以更好地解决这个问题吗?
要点:
理解它的一种更简单的方法就是这样,你想在一天内看到3部电影。你知道你想看哪3个,你不知道你想看到它们的时间。
我需要一个能够显示所有选项的列表。你现在可以看这部电影,此时此电影......
e.g。
列表1 - 电影1 - 8:00,电影2 - 9:00,电影3 - 12:00
清单2 - 电影1 - 8:00,电影2 - 9:00,电影3 - 13:00
清单3 - 电影1 - 8:00,电影2 - 11:30,电影3 - 12:00
等
列表顺序无关紧要。
答案 0 :(得分:0)
你让这比我想象的要复杂得多。如果你从一个放映时间列表开始,那么点击枚举就很简单了。
List<Show> startTimes = GetTimesFromDB();
var moviesGrouped = startTimes.GroupBy(x => x.Name);
foreach(var group in moviesGrouped)
{
// print times for each movie
}
要使用具体示例,请使用此示例:
List<Sample> sample = new List<Sample>
{
new Sample { Id = 1, Time = DateTime.Now },
new Sample { Id = 1, Time = DateTime.Now.AddDays(1) },
new Sample { Id = 2, Time = DateTime.Now.AddDays(2) },
new Sample { Id = 2, Time = DateTime.Now.AddDays(3) },
new Sample { Id = 3, Time = DateTime.Now.AddDays(4) },
};
foreach (var group in sample.GroupBy(x => x.Id))
{
foreach (var element in group)
{
Console.WriteLine(element.Id);
Console.WriteLine(element.Time);
}
}
您只需按标记分组(在本例中为电影名称),然后枚举分组(将包含您的电影时间)。
但是,您可以通过更改对象模型来大大简化此操作。
public class Movie
{
public int MovieId { get; set; }
public string Name { get; set; }
public List<Showing> Showings { get; set; }
}
public class Showing
{
public DateTime StartTime { get; set; }
public List<Seat> UnsoldSeats { get; set; }
// Etc
}
然后当你有一个List<Movie>
时,它已经被设置为进行该显示,它自然比简单的显示类更有意义。
foreach(var movie in movies)
{
foreach(var showing in movie.Showings)
// DoStuff
}