簡體   English   中英

C#批量添加到排序列表

[英]C# Bulk Add to a Sorted List

我正在尋找在2種不同條件下使用排序列表或數組的最快,最有效的方法。 我想吃我的蛋糕,也吃!
首先,我需要向列表/數組中批量添加幾百個鍵/值對(可能多達20,000個),然后按鍵對它們進行排序。 QuickSort可能是最好的方法,確定插入點並在每次添加后改組項目肯定不是。
之后,我需要根據需要偶爾將鍵/值對添加到列表/數組,並將它們插入正確的位置。 每次插入后重新運行QuickSort可能不是最好的方法。
當然,我希望對它進行排序的原因是進行快速的B樹查找以基於鍵查找值。
[FYI:在一種情況下,鍵是Guid,值是帶有字符串(人類友好名稱)和一對整數的結構或簡單類。 在另一種情況下,字符串是關鍵。 不幸的是,不能保證字符串/名稱唯一。 一切都保存在RAM中,因為對用戶的速度和響應能力至關重要。 批量添加的所有初始數據都是由另一個應用生成的,我無法控制它。]
我對如何編寫一個幫助程序類來做到這一點有一些想法,但是我不想重蹈覆轍。 但是我無法找到一種使用內置列表或集合類的方法。 SortedList類似乎沒有批量添加,常規列表或數組類(一旦排序)沒有按鍵插入的方法。

有什么建議嗎?

只要您僅基於鍵而不是值搜索元素,就應該考慮使用Dictionary而不是List 嘗試獲取單個鍵的值時,這是O(1)操作,而不是必須進行多次比較才能在列表中找到同一對象。

var dictionary = new Dictionary<string, string>
{
    {"e11a5c0e-58b4-4f3c-86b8-6a127fff6ee8", "A"},
    {"7c1fdecf-7f75-4538-8805-50a67652a5a3", "B"},
    {"fed8892c-bb18-4fe3-8e31-8e287afa9243", "C"}
};

if (dictionary.TryGetValue("fed8892c-bb18-4fe3-8e31-8e287afa9243", out var value))
{
    Console.WriteLine($"The value is: {value}");
}

另外,如果您可以避免使用GUID並使用連續的intlong ,則可以將其添加到列表的末尾,對嗎? 無論如何處理,當您使用GUID作為鍵時,您總是必須進行多次比較才能插入並交換其他元素,以使列表保持排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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