簡體   English   中英

從 SortedList 獲取有序值列表的最有效方法是什么<DateTime, float>哪里的鍵滿足約束?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM