![](/img/trans.png)
[英]What is the most efficient way to get an ordered list from a Tree (Diagram)?
[英]What's the most efficient way to get an ordered list of values from SortedList<DateTime, float> where the keys satisfy a constraint?
我所說的高效是指最短的計算時間。
我想出了:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.