首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据日期和时间对列表进行排序

根据日期和时间对列表进行排序
EN

Code Review用户
提问于 2015-11-28 14:02:49
回答 3查看 53.4K关注 0票数 6

我有一个类,用于存储从系统读取的数据的样本。在该类中有一个属性,用于存储该示例的日期和时间:

代码语言:javascript
复制
public class ReadingValue
{
    public DateTime DateTimeOfReading { get; set; }
    public float Reading { get; set; }
}

我需要根据ReadingValue属性对DateTimeOfReading列表进行排序。

这就是我想出来的:

代码语言:javascript
复制
public IEnumerable<ReadingValue> Hourly(IList<ReadingValue> readings)
{
    var sortedReadings = readings.OrderBy(x => x.DateTimeOfReading.TimeOfDay)
        .OrderBy(x => x.DateTimeOfReading.Date)
        .OrderBy(x => x.DateTimeOfReading.Year);

    return sortedReadings;
}

代码似乎有效,当我传入ReadingValue's的列表时,它会按顺序返回列表。有什么我忽略的或者应该做的事情不一样吗?我知道时间和日期编程可能是一个棘手的话题,比如时区、日光节约等,但我不认为对日期和时间进行排序不应该涉及这些问题。

EN

回答 3

Code Review用户

回答已采纳

发布于 2015-11-28 16:25:14

您应该先执行OrderBy,然后执行ThenBy,而不是执行另一个OrderBy。您目前正在做的是,您正在重新排序后的第一个OrderBy的一切。

代码语言:javascript
复制
public IEnumerable<ReadingValue> Hourly(IList<ReadingValue> readings)
{
    var sortedReadings = readings.OrderBy(x => x.DateTimeOfReading.TimeOfDay)
        .ThenBy(x => x.DateTimeOfReading.Date)
        .ThenBy(x => x.DateTimeOfReading.Year);

    return sortedReadings;
}
票数 11
EN

Code Review用户

发布于 2015-11-30 10:33:15

你可以这样简化-

代码语言:javascript
复制
public IEnumerable<ReadingValue> Hourly(IEnumerable<ReadingValue> readings)
{
    return readings.OrderBy(x => x.DateTimeOfReading);
}

为什么这种方法叫每小时一次?也许OrderReadings会更合适。

票数 4
EN

Code Review用户

发布于 2015-11-30 08:25:45

除了我想要补充的@PankajGupta答案之外,最好使用IEnumerable<ReadingValue>而不是IList<ReadingValue>作为方法参数类型。

通过这种方式,您不仅可以传递IList<>,还可以将任何实现IEnumerable<ReadingValue>的数组ReadingValue[]ICollection<ReadingValue>或任何对象传递给该方法。

因为方法名应该由动词或动词短语组成,所以您应该考虑将方法名从Hourly改为SortHourly()

请参阅:网络命名指南

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/112142

复制
相关文章

相似问题

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