gpt4 book ai didi

c# - 如何快速过滤满足日期范围条件的对象

转载 作者:太空狗 更新时间:2023-10-29 21:41:29 25 4
gpt4 key购买 nike

我有很多对象

public class Restriction
{
// which days this restriction applies to
public DateTime From { get; set; }
public DateTime To { get; set; }

// valid applicable restriction range
public int Minimum { get; set; }
public int Maximum { get; set; }
}

我可以这样

IList<Restricton> restrictions;

然后搜索在特定日期应用的限制

restrictions.Where(r => day >= r.From && day <= r.To);

问题

我想使用 IList<T>这不是最佳选择,因为我将对这些限制进行大量搜索,并且每次我都会调用 LINQ 方法 .Where整个集合将被枚举和过滤。

根据我的 SQL 知识,我知道表扫描总是比索引扫描差,所以我想在这里应用类似的逻辑。我宁愿以更智能的方式进行过滤,而不是每次都枚举整个集合。

问题

有什么更好(更快)的方法来枚举我的限制,这样我的算法就不会在每次我想过滤掉一些限制时都对它们进行枚举?

我在想IDictionary<K,V>但它仍然需要扫描所有这些,因为我的限制不是每天设置的,而是每天的范围。

您有什么建议?

最佳答案

考虑按 From 对列表进行排序 - 然后您可以快速执行二进制搜索以找到可能适用于 From 的限制子集。

您可能还希望获得按 To 排序的列表的第二个副本 - 然后,您可以再次执行二分搜索以找到适用于 的限制子集>到。对于这两个列表,您可以执行两个二分搜索,找出哪个集合更小,然后只考虑那个集合。

可能还有更好的选择,但这是一个好的开始,我现在没有足够的精力去解决更好的问题:(

关于c# - 如何快速过滤满足日期范围条件的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968829/

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