从 SortedList<DateTime、float 中获取值的有序列表的最有效方法是什么>其中键满足约束?



高效是指最短的计算时间。

我想出了:

List<float> valuesLaterThanDate = new List<float>();
foreach (var kvp in sortedList.Where( t => t.Key >= selectionDate))
{           
valuesLaterThanDate.Add( kvp.Value );
}

有更有效的方法吗?还是更紧凑的表达?

是的,你可以把它写成一个更紧凑的表达式:

var valuesLaterThanDate = sortedList.Where(t => t.Key >= selectionDate).Select(t => t.Value).ToList();

您可以通过以下两种方式提高性能:

  • 使用IndexOfKey对开始键进行二进制查找。这具有O(log(N))效率。
  • 你可以预先分配列表来进行更有效的插入。
var startIndex = sortedList.IndexOfKey(selectionDate);
var valuesLaterThanDate = new List<float>(sortedList.Count - startIndex);
for (var i = startIndex; i < sortedList.Count; i++)
{
valuesLaterThanDate.Add(sortedList[i].Value);
}

注意,如果没有找到键,IndexOfKey只返回-1,所以如果发生这种情况,那么您可能需要自己实现二进制搜索。在过去的SortedList<T>中有关于这个问题的投诉。

更有效的方法?这是不可回答的,因为你没有提出任何衡量/确定效率的标准。性能效率?内存使用效率?代码的可读性和可维护性?

更紧凑的形式?是的:

var valuesLaterThanDate = sortedList
.Where(t => t.Key >= selectionDate)
.Select(t => t.Value)
.ToList();

相关内容

  • 没有找到相关文章

最新更新