首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 2.0 時代集合操作利器:Find、FindAll 與 Sort 實戰指南

     編輯:關於.NET

前言

習慣 LINQ 與 Lambda 後回頭維護 .NET 2.0 專案,才發現 List<T> 早已內建強大的委派型別方法:Find、FindAll、Sort。善用它們能避免手寫 foreach 迴圈,讓 2.0 時代的集合操作同樣優雅高效。

核心委派型別

  • Predicate<T>:T → bool,用於篩選條件(Find/FindAll)
  • Comparison<T>:(T, T) → int,用於排序比較(Sort)

Find:尋找單一符合項目

/// <summary> 檢查選單鍵值是否存在 </summary>
public bool ContainsKey(string key) {
    return this.MenuEdits.Find(
        new Predicate<MenuEditEntity>(delegate (MenuEditEntity entity) {
            return entity.MenuKey == key;
        })) != null;
}
  • 回傳第一個符合條件的元素,若無則回傳 null(參考型別)或 default(T)(實值型別)。
  • 匿名委派語法雖較冗長,但在 2.0 環境下已是最佳選擇。

FindAll:取得所有符合項目

用法與 Find 幾乎相同,差別在於回傳 List<T> 包含所有符合條件的元素:

var activeMenus = menuList.FindAll(
    new Predicate<MenuEditEntity>(delegate (MenuEditEntity e) {
        return e.IsActive;
    }));

Sort:原地排序

list.Sort(new Comparison<BaseEditor>(delegate(BaseEditor m1, BaseEditor m2) {
    if (m1.TabIndex == m2.TabIndex) return 0;
    return m1.TabIndex < m2.TabIndex ? -1 : 1;
}));
  • 無回傳值,直接對原 List<T> 進行排序。
  • 比較函式回傳值規則:
回傳值含義
0兩者相等,順序不變
< 0 (通常 -1)第一個參數排在前面
> 0 (通常 1)第一個參數排在後面

範例中依 TabIndex 遞增排序,m1 > m2 回傳 1 表示 m1 應排在 m2 之後。

進階:多重排序鍵

可在委派中串聯比較邏輯:

list.Sort(delegate(Item a, Item b) {
    int cmp = a.Category.CompareTo(b.Category);
    if (cmp != 0) return cmp;
    return a.Priority.CompareTo(b.Priority); // 次要鍵
});

總結

即使在 .NET 2.0,Predicate<T>、Comparison<T> 搭配匿名委派已提供表達力強的集合操作能力。掌握這三個方法,能大幅減少樣板式迴圈程式碼,提升可讀與維護性。完整多載請參考 MSDN 文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved