.NET Dictionary vs List LINQ First() 查找效能

若系統有一些比較靜態資料或是低頻率更新的資料
直覺會直接用List<DataModel> 然後再搭配 LINQ First() 去找查資料
但如果在高頻的查找情境中,選擇 Dictionary 或 List 會直接影響效能

List 優點

記憶體友好:無需額外的結構,資料量少時非常高效
順序性:保留資料的順序,便於處理需要按順序操作的資料

List 缺點

查找效能低:查找的時間複雜度為 O(n),資料量大時會顯著影響性能
資料唯一性:無內建機制保證鍵值唯一,需手動檢查

List 查找範例

var list = new List<KeyValuePair<int, string>>
{
    new KeyValuePair<int, string>(1, "Alice"),
    new KeyValuePair<int, string>(2, "Bob"),
    new KeyValuePair<int, string>(3, "Charlie")
};

// 查找 Key 為 2 的資料
var result = list.FirstOrDefault(x => x.Key == 2);
Console.WriteLine(result.Value); // Output: Bob

當資料量為 1,000,000 時,List 查找需要 O(n) 的時間,線性增加

Dictionary 優點

高效查找:基於哈希表,時間複雜度為 O(1),非常適合頻繁查找
鍵值結構:方便以唯一鍵 (Key) 儲存和查找資料
易於管理資料:避免重複資料的存在,直接覆蓋

Dictionary 缺點

記憶體消耗高:需要額外的儲存空間來維護哈希表
順序不可控:資料無序,遍歷可能會因為順序問題導致效能損耗

Dictionary 查找範例

var dictionary = new Dictionary<int, string>
{
    { 1, "Alice" },
    { 2, "Bob" },
    { 3, "Charlie" }
};

// 查找 Key 為 2 的資料
var result = dictionary.TryGetValue(2, out var value) ? value : "Not Found";
Console.WriteLine(result); // Output: Bob

當資料量為 1,000,000 時,Dictionary 查找的時間幾乎恆定(O(1))

效能比較

特性DictionaryList
查找時間複雜度O(1)(基於哈希)O(n)(線性搜尋)
資料插入或更新時間O(1)O(1)(添加至尾部),O(n)(插入至中間)
記憶體使用量高(儲存哈希表需要額外空間)
適用場景頻繁查找資料資料量少或操作順序較重要

結論

  • 資料量大,且需要頻繁查找時,Dictionary 是最佳選擇
  • 需要保證鍵的唯一性並快速獲取資料,Dictionary 是最佳選擇
  • 如果資料量小且偶爾查找,List 更簡單且記憶體友好
  • 需要更多用於迭代處理或保留插入順序的場景,List 是最佳選擇
  • 避免無需的 First() 查找,當有固定鍵值時,優先考慮使用 Dictionary


訂閱
通知
guest
4 留言
預約回饋
查看所有留言
trackback

ivermectin scabies medical evidence

ivermectin scabies medical evidence

trackback
22 數天 之前

avanafil safe digital access

avanafil safe digital access

trackback
21 數天 之前

avanafil pricing overview

avanafil pricing overview

trackback
17 數天 之前

online safety rules

online safety rules

string(67) "font-size: 25px; width: 25px; height: 25px;right:10px;bottom:140px;"