[VB / C#] List 排序(sort)的作法 from 微軟msdn網站

摘要:[VB / C#] List 排序(sort)的作法 from 微軟msdn網站

 

 

一直以來,排序對我來說都滿頭痛的

如果程式裡面沒有適當的函數協助我

我就會想到資料結構、或是演算法(以前學校學的,都有這些範例)

 

前兩天遇見一個情況

對方傳來一段 "字串",裡面會出現時間(例如 14 00或 09 00)

我必須用這些資訊來排序

 

幸好微軟 msdn這個寶庫就有範例可以協助

詳見: VB語法  http://msdn.microsoft.com/zh-tw/library/w56d4y5z(v=vs.110).aspx

          C#語法  http://msdn.microsoft.com/zh-tw/library/w56d4y5z(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

 

 

範例有一個 Class名為 Part

您可以在網站或專案的 /App_code目錄底下,新增一個「類別(CLASS)」檔案

把這一段COPY進去即可

 

using System;
using System.Collections.Generic;   // List會用到這個命名空間,別忘了加上!

// Simple business object. A PartId is used to identify the type of part 
// but the part name can change. 
public class Part : IEquatable<Part> , IComparable<Part>
{
    public string PartName { get; set; }    // 公開屬性 


    public int PartId { get; set; }    // 公開屬性 


    public override string ToString()
    {
        return "ID: " + PartId + "   Name: " + PartName;
    }
    public override bool Equals(object obj)
    {
        if (obj == null) return false;
        Part objAsPart = obj as Part;
        if (objAsPart == null) return false;
        else return Equals(objAsPart);
    }
    public int SortByNameAscending(string name1, string name2)
    {
        return name1.CompareTo(name2);
    }

    // Default comparer for Part type.
    public int CompareTo(Part comparePart)
    {
        // A null value means that this object is greater.
        if (comparePart == null)
            return 1;

        else
            return this.PartId.CompareTo(comparePart.PartId);
    }
    public override int GetHashCode()
    {
        return PartId;
    }
    public bool Equals(Part other)
    {
        if (other == null) return false;
        return (this.PartId.Equals(other.PartId));
    }
    // Should also override == and != operators.

}

 

其餘程式,可以放在ASP.NET的 Page_Load事件內執行

會動以後,就能改了。

 

 

講完了,好簡單。

using System.Collections.Generic;   // List會用到這個命名空間,別忘了加上!

 

        // Create a list of parts.  Part是您自己定義的資料型態,就是前面的那個類別檔。
        List<Part> parts = new List<Part>();

        // Add parts to the list.   先把您需要的資料,加入List,就能進行排序囉。
        parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
        parts.Add(new Part() { PartName= "crank arm", PartId = 1234 });
        parts.Add(new Part() { PartName = "shift lever", PartId = 1634 }); ;
        // Name intentionally left null.
        parts.Add(new Part() {  PartId = 1334 });
        parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
        parts.Add(new Part() { PartName = "cassette", PartId = 1534 });


        // Write out the parts in the list. This will call the overridden 
        // ToString method in the Part class.
        Console.WriteLine("\nBefore sort:");
        foreach (Part aPart in parts)
        {
            Console.WriteLine(aPart);   // ASP.NET請改成 Response.Write()

        }


        // Call Sort on the list. This will use the 
        // default comparer, which is the Compare method 
        // implemented on Part.
        parts.Sort();


        Console.WriteLine("\nAfter sort by part number:");
        foreach (Part aPart in parts)
        {
            Console.WriteLine(aPart);   // ASP.NET請改成 Response.Write()
        }


        // This shows calling the Sort(Comparison(T) overload using 
        // an anonymous method for the Comparison delegate. 
        // This method treats null as the lesser of two values.
        parts.Sort(delegate(Part x, Part y)
        {
            if (x.PartName == null && y.PartName == null) return 0;
            else if (x.PartName == null) return -1;
            else if (y.PartName == null) return 1;
            else return x.PartName.CompareTo(y.PartName);
        });

        Console.WriteLine("\nAfter sort by name:");
        foreach (Part aPart in parts)
        {
            Console.WriteLine(aPart);   // ASP.NET請改成 Response.Write()

        }

        /*

            Before sort:
            ID: 1434   Name: regular seat
            ID: 1234   Name: crank arm
            ID: 1634   Name: shift lever
            ID: 1334   Name: chain ring
            ID: 1444   Name: banana seat
            ID: 1534   Name: cassette

           After sort by part number:
            ID: 1234   Name: crank arm
            ID: 1334   Name: chain ring
            ID: 1434   Name: regular seat
            ID: 1444   Name: banana seat
            ID: 1534   Name: cassette
            ID: 1634   Name: shift lever

         */

 

微軟 msdn網站真是太棒了

 

願意找、願意(動手)試試看

就會有很多範例可以讓我們用

 

機會,是給願意嘗試的人!

 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

*********************************************************************************************

*** ASP.NET MVC線上課程 第一天 免費看 (5.5小時) *** 

************************************************************(歡迎索取,免費申請)*****

 

ASP.NET遠距教學、線上課程(Web Form + MVC)第二門 課程「四折」-- 以MVC課程作為優惠。

第一天完整課程,提供 "完整" 試聽。  如 "第一天"試聽 不滿意 全額退費!

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

    MIS2000 Lab.  線上教學影片(YouTube) **免費觀賞**