高效是指最短的计算时间。
我想出了:
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();