首页 > 解决方案 > 按五分钟时间跨度分组

问题描述

我有以下代码

TimeSpan[] hours = new[] { 
  new TimeSpan(10,35,50), 
  new TimeSpan(10,36,48), 
  new TimeSpan(10,41,48), 
  new TimeSpan(10,47,58), 
  new TimeSpan(10,49,14), 
  new TimeSpan(11,22,15), 
  new TimeSpan(11,24,18), 
  new TimeSpan(11,25,25), 
};

我想将小时和分钟按 5 分钟分组。我想得到下面的结果

第一组

**10:35:50
10:36:48
10:41:48** 

第二组

**10:47:58
10:49:14** 

第三组

**11:22:15
11:24:18
11:25:25**

我尝试了以下代码,但无法获得所需的确切结果

  var query = (from x in hours select x)
    .GroupBy(r=> r.Ticks / TimeSpan.FromMinutes(5).Ticks));

标签: c#.netlinqlambda

解决方案


如果你想使用 Linq。那么这是最简单的解决方案Demo

      TimeSpan[] hours = new[] 
      { new TimeSpan(10, 35, 50),
        new TimeSpan(10, 36, 48),
        new TimeSpan(10, 41, 48),
        new TimeSpan(10, 47, 58),
        new TimeSpan(10, 49, 14),
        new TimeSpan(11, 22, 15),
        new TimeSpan(11, 24, 18),
        new TimeSpan(11, 25, 25), };
      int groupID = -1;
      var result = hours.OrderBy(h => h).Select((item, index) =>
        {
          if (index == 0 || (!(Math.Abs(hours[index - 1].Subtract(item).TotalMinutes) <= 5)))
            ++groupID;

          return new { group = groupID, item = item };
        }).GroupBy(item => item.group);

推荐阅读