代码之家  ›  专栏  ›  技术社区  ›  radbyx Matt

比较日期时间类型的对象的最快方法

  •  1
  • radbyx Matt  · 技术社区  · 14 年前

    我做了这个。这是查找日期时间集合中最新日期时间的最快方法吗?

    我想知道是否有一种方法可以解释我在前臂内所做的事情,但即使有,我也看不出它是如何比我所有准备的都快。

    List<StateLog> stateLogs = db.StateLog.Where(p => p.ProductID == product.ProductID).ToList();
                    DateTime lastTimeStamp = DateTime.MinValue;
    
                    foreach (var stateLog in stateLogs)
                    {
                        int result = DateTime.Compare(lastTimeStamp, stateLog.TimeStamp);
                        if (result < 0)
                            lastTimeStamp = stateLog.TimeStamp; // sæt fordi timestamp er senere
                    }
    
    3 回复  |  直到 14 年前
        1
  •  0
  •   Hans Passant    14 年前

    你不能让它更快,它本质上是一个O(N)算法。

        2
  •  2
  •   SLaks    14 年前

    你可以比较 DateTime s使用其重载运算符:

    foreach (var stateLog in db.StateLog.Where(p => p.ProductID == product.ProductID))
    {
        if (lastTimeStamp < stateLog.TimeStamp)
            lastTimeStamp = stateLog.TimeStamp; // sæt fordi timestamp er senere
    }
    
        3
  •  0
  •   spender    14 年前
    stateLogs.OrderByDescending(s=>s.TimeStamp).First(s=>s.TimeStamp)
    

    假定StateLogs是非空集合。

    或者,更快的方法是:

    stateLogs.Max(s=>s.TimeStamp)
    

    但我不确定它是否能胜过手动循环。