我有一份这样的名单:
class Article
{
...
Public DateTime PubTime{get;set}
...
}
List<Article> articles现在我想将这个列表按小时范围分组:0-5,6-11,12-17,18-23。
我知道有一种很麻烦的方法可以做到:
var firstRange = articles.Count(a => a.PubTime.Hour >= 0 && a.PubTime.Hour <= 5);但我想用一种优雅的方式。我怎么能这么做?用Linq还是其他什么?
发布于 2020-11-18 07:17:55
Hour / 6组
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个项。
发布于 2020-11-18 07:15:28
您可以编写一个CheckRange函数,它接受值并返回一个bool。使您的代码更加可重用和优雅。
函数示例:
bool CheckRange (this int number, int min, int max)
=> return (number >= min && number <= max);现在您可以使用这个函数来检查PubTime.Hour是否在正确的时间限制内。
实现示例:
var firstRange = articles.Count(a => a.CheckRange(0, 5));https://stackoverflow.com/questions/64888552
复制相似问题