gpt4 book ai didi

c# - 根据时间从对象列表中选择第一个、最后一个、最小值、最大值

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:37 25 4
gpt4 key购买 nike

我有一个 MyObject 列表如下:

public MyObject(reqVal, reqTime)
{
_value = reqVal;
_time = reqTime;

}

public double Value
{
get {return _value;}
}

public DateTime Time
{
get {return _time;}
}

var myList = new List<MyObject>();
myList.Add(new MyObject(100, new DateTime(2012, 03, 01, 10, 0, 0));
myList.Add(new MyObject(50, new DateTime(2012, 03, 01, 10, 3, 0));
myList.Add(new MyObject(10, new DateTime(2012, 03, 01, 10, 6, 0));
myList.Add(new MyObject(230, new DateTime(2012, 03, 01, 10, 9, 0));
....

如您所见,此列表包含一整天的值,每个值每 3 分钟生成一次。我如何根据 15 分钟的时间 block 找到以下内容:

  1. 最大值
  2. 最小值
  3. 开放值(value)
  4. 关闭值

所以如果第一个日期时间值是 2012/03/01 10:00我需要在 10:00 到 10:15 之间找到上面的 4 个,然后在 10:15 到 10:30 之间找到下一组 4,依此类推...

因此所有这些值都将根据它们的时间范围进行计算例如第二个 maxVal 或 openVal 将是 10:15 和 10:30 之间的 maxVal 和 openVal

任何帮助将不胜感激,

谢谢。

最佳答案

我可能会使用这样的东西:

var end = start + TimeSpan.FromMinutes(15);

// Avoid querying more than once.
var matches = input.Where(x => x.Time >= start && x.Time < end)
.ToList();

// TODO: Consider what you want to do if there are no matches.
// (The code below would fail.)

var max = matches.Max(x => x.Value);
var min = matches.Min(x => x.Value);
var open = matches.First().Value;
var close = matches.Last().Value;

使用 Aggregate,您可以在输入数据的一次传递中完成所有这些,而无需创建列表……但它会复杂得多。保持简单,然后进行基准测试以查看此解决方案是否为您执行足够好

关于c# - 根据时间从对象列表中选择第一个、最后一个、最小值、最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com