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

DropDownList 依文字前綴數字排序:泛型與 LINQ 實作

     編輯:ASP.NET 基礎

情境說明

下拉選單項目文字格式為 "1_選項A"、"3_選項C" 等,資料庫無獨立排序欄位,需依前綴數字排序。傳統作法寫冒泡/選擇排序,現代 C# 推薦使用 LINQ 與泛型 List<T> 一行解決。

傳統演算法實作(教學用)

public static void SortByPrefixBubble(DropDownList ddl)
{
    for (int i = 0; i < ddl.Items.Count; i++)
    {
        for (int j = i + 1; j < ddl.Items.Count; j++)
        {
            int valI = ExtractPrefixNumber(ddl.Items[i].Text);
            int valJ = ExtractPrefixNumber(ddl.Items[j].Text);
            if (valI > valJ)
            {
                var item = ddl.Items[j];
                ddl.Items.RemoveAt(j);
                ddl.Items.Insert(i, item);
            }
        }
    }
}

private static int ExtractPrefixNumber(string text)
{
    var match = System.Text.RegularExpressions.Regex.Match(text, @"^\d+");
    return match.Success ? int.Parse(match.Value) : int.MaxValue; // 無數字者排最後
}

現代 LINQ 寫法(推薦生產環境)

public static void SortByPrefixLinq(DropDownList ddl)
{
    var sorted = ddl.Items.Cast<ListItem>()
        .OrderBy(item => ExtractPrefixNumber(item.Text))
        .ToList();

    ddl.Items.Clear();
    foreach (var item in sorted)
        ddl.Items.Add(item);
}

完整頁面範例

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DropDownSort.aspx.cs" Inherits="WebApp.DropDownSort" %>
<html><body>
<form id="form1" runat="server">
    <asp:DropDownList ID="ddlType" runat="server"></asp:DropDownList>
    <asp:Button ID="btnSort" runat="server" Text="排序" OnClick="btnSort_Click" />
</form></body></html>
public partial class DropDownSort : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlType.Items.Add(new ListItem("--請選擇--", ""));
            ddlType.Items.Add(new ListItem("3_第三項"));
            ddlType.Items.Add(new ListItem("1_第一項"));
            ddlType.Items.Add(new ListItem("4_第四項"));
            ddlType.Items.Add(new ListItem("2_第二項"));
        }
    }

    protected void btnSort_Click(object sender, EventArgs e)
    {
        SortByPrefixLinq(ddlType);
    }

    // 將上述 LINQ 方法放此處或共用工具類
}

效能比較與建議

方法時間複雜度程式碼行數可讀性
冒泡/選擇排序O(n²)~30 行低
LINQ OrderByO(n log n)~8 行高

資料量超過百項時,LINQ 優勢明顯。若極度追求效能可改用 List<ListItem> 配合 Sort(Comparison<T>) 避免轉型開銷。

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