首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过从IGrouping的每个组中选择一个项来生成列表

通过从IGrouping的每个组中选择一个项来生成列表
EN

Stack Overflow用户
提问于 2011-05-09 19:49:29
回答 1查看 141关注 0票数 0

比方说,我有一组电影的开始时间。

代码语言:javascript
复制
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

等。

我试着在各个小组中穿行

代码语言:javascript
复制
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

等。

名单的顺序并不重要。

EN

回答 1

Stack Overflow用户

发布于 2011-05-09 20:05:49

你把事情弄得比我想的复杂多了。如果从显示时间的列表开始,那么简单的排序问题就是枚举。

代码语言:javascript
复制
List<Show> startTimes = GetTimesFromDB();

var moviesGrouped = startTimes.GroupBy(x => x.Name);

foreach(var group in moviesGrouped)
{
    // print times for each movie
}

要使用具体示例,让我们使用以下示例:

代码语言:javascript
复制
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);
    }
}

您只需按令牌进行分组(在本例中为电影名称),然后枚举分组(其中将包含您的电影时间)。

但是,您可以通过更改对象模型来大大简化这一点。

代码语言:javascript
复制
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>时,它已经被设置为执行那个显示,它当然比一个简单的显示类更有意义。

代码语言:javascript
复制
foreach(var movie in movies)
{
    foreach(var showing in movie.Showings)
       // DoStuff
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5941739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档