是否有一个优雅的解决方案来遍历有序列表以对当前对象和下一个对象进行一些计算? LINQ必须采用更明智的方法来执行以下操作:

public static List<double> GetHoursBetweenDates(List<DateTime> aDates)
{
    List<double> lst = new List<double>();
    var olst = aDates.OrderByDescending(d => d).ToList();
    for (int i = 0; i < olst.Count - 1; i++)
    {
        lst.Add(olst[i].Subtract(olst[i+1]).TotalHours);
    }
    return lst;
}

最佳答案

比较列表中每个连续元素最简单的方法是:

var sorted = aDates.OrderByDescending(d => d);
var results =
    sorted.Zip(sorted.Skip(1), (a, b) => a.Subtract(b).TotalHours);

或者,您可以执行以下操作:
var sorted = aDates.OrderByDescending(d => d).ToArray();
var results =
    from i in Enumerable.Range(0, sorted.Length - 1)
    select sorted[i].Subtract(sorted[i + 1]).TotalHours;

但是第二种方法仅适用于List<T>T[]或任何支持数组样式索引器的类型。

10-02 01:52
查看更多