首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按小时范围分组dateTime

按小时范围分组dateTime
EN

Stack Overflow用户
提问于 2020-11-18 07:09:54
回答 2查看 97关注 0票数 0

我有一份这样的名单:

代码语言:javascript
复制
class Article
{
...
Public DateTime PubTime{get;set}
...
}

List<Article> articles

现在我想将这个列表按小时范围分组:0-5,6-11,12-17,18-23。

我知道有一种很麻烦的方法可以做到:

代码语言:javascript
复制
var firstRange = articles.Count(a => a.PubTime.Hour >= 0 && a.PubTime.Hour <= 5);

但我想用一种优雅的方式。我怎么能这么做?用Linq还是其他什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-18 07:17:55

Hour / 6

代码语言:javascript
复制
var grouped = articles.GroupBy(a => a.PubTime.Hour / 6);
IDictionary<int, int> CountsByHourGrouping = grouped.ToDictionary(g => g.Key, g => g.Count());

字典中的键是周期(0表示0-5,1表示6-11,2表示12-17,3表示18-23)。该值是指该期间的物品计数。

请注意,您的字典将只包含源数据中存在这些时间的值,因此它并不总是包含4个项。

票数 1
EN

Stack Overflow用户

发布于 2020-11-18 07:15:28

您可以编写一个CheckRange函数,它接受值并返回一个bool。使您的代码更加可重用和优雅。

函数示例:

代码语言:javascript
复制
bool CheckRange (this int number, int min, int max) 
    => return (number >= min && number <= max);

现在您可以使用这个函数来检查PubTime.Hour是否在正确的时间限制内。

实现示例:

代码语言:javascript
复制
var firstRange = articles.Count(a => a.CheckRange(0, 5));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64888552

复制
相关文章

相似问题

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