比方说,我有一组电影的开始时间。
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至下午1: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:00Movie1拥有所有Movie2和3的实例,所以我不得不将列表分开,这就变得太混乱了。
有什么更好的方法来解决这个问题吗?
摘要:
一个更容易理解的方法是这样的,你想一天看3部电影。你知道你想看哪三个,你不知道你想在什么时候看到它们。
我需要一份能提供所有选择的清单。你现在可以看这部电影,这个时候.
例如:
电影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
等。
名单的顺序并不重要。
发布于 2011-05-09 20:05:49
你把事情弄得比我想的复杂多了。如果从显示时间的列表开始,那么简单的排序问题就是枚举。
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
}https://stackoverflow.com/questions/5941739
复制相似问题