gpt4 book ai didi

c# - 在 Dictionary 中查找最接近的 DateTime 键

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

我有 Date DateTime 的一部分作为查找值,并喜欢在 Dictionary<DateTime, double> 类型的字典中检索匹配值.请注意,日期时间键仅存储为日期部分。

我的问题是可能没有与我的查找值匹配的键。然后我想做的是找到最近的 previous dateTime.Date 键和匹配值。

现在,我知道字典不是按键排序的。我可以使用 SortedDictionary,但出于特定原因更喜欢使用 Dictionary,或者切换到 List 集合(可以预先排序)。我的问题是,在这种情况下您会建议做什么:保留 Dictionary 结构并递减查找值直到找到匹配的键是否更有效?或者使用列表集合并使用 Linq 会更好吗?每个字典包含大约 5000 个键/值对。另外,请注意我正在寻找一个计算效率很高的解决方案,因为查找的频率非常高(可能有几十万次(每次查找都保证与以前的任何值不同)

最佳答案

因为你需要它很快,我认为最好的办法是使用 BinarySearch 的结果。 .这需要 List<T>这是排序。

int result = myList.BinarySearch(targetDate);
if (result >= 0)
return myList[result];
else
{
int nextLarger = ~result;
// return next smaller, or if that doesn't exist, the smallest one
return myList[Math.Max(0, nextLarger - 1)];
}

应该可以创建一个结合 Dictionary<TKey,TValue> 的类和一个排序的 List<TKey>仍然像 Dictionary<TKey,TValue> 一样序列化.序列化可能就像放置一个 [JsonConverter(typeof(KeyValuePairConverter))] 一样简单(在 Json.NET 中)在你的课上。

只是为了完整起见,以防将来其他人阅读这篇文章,如果速度不是很重要,你可以用这样的东西更简单地做到这一点:

var result = myDict.Keys.Where(x => x < targetDate).Max();

关于c# - 在 Dictionary<DateTime, double> 中查找最接近的 DateTime 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632926/

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