1. 程式人生 > >C# List集合排序方法小結

C# List集合排序方法小結

今天我們來一起看一下關於集合List中的排序方法,大家都知道我們一般拿到一些資料的時候會放到一個容器中去,然後根據其中的一種屬性來進行排序。我們很自然的就能想到sort()方法去自動排序。這樣排序比較快,sort有三種結果 1,-1,0分別是大,小,相等。預設List的排序是升序排序,但是這個方法的後面有過載版本,今天我們一起來看一下吧!
首先我們來建立一個類吧!叫什麼呢?就叫人類吧。

public class People
{
    public string name { get; set; }
    public int age { get; set; }

}

這個類有兩個屬性,一個是姓名,一個是年齡。接下來我們給它排序吧!

第一種:通過新建類的方式來排序

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestListSort : MonoBehaviour
{
    private List<People> peoples = new List<People>();

    // Use this for initialization
    void Start()
    {
        peoples.Add(new People() { name = "小明", age = 21 });
        peoples.Add(new People() { name = "小李", age = 24 });
        peoples.Add(new People() { name = "小玉", age = 22 });
        peoples.Add(new People() { name = "小紅", age = 18 });
        peoples.Add(new People() { name = "小王", age = 17 });

        peoples.Sort(new PeopleCompare());

        foreach (var people in peoples)
        {
            print(people.name + people.age);
        }
    }

    static int AgeCompare(People x, People y)
    {
        if (x.age > y.age)
        {
            return 1;
        }
        else if (x.age == y.age)
        {
            return 0;
        }
        else
        {
            return -1;
        }
    }


    class PeopleCompare : IComparer<People>
    {
        public int Compare(People x, People y)
        {
            return AgeCompare(x, y);
        }
    }
}



第二種使用委託Comparis來排序

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestListSort : MonoBehaviour
{
    private List<People> peoples = new List<People>();

    // Use this for initialization
    void Start()
    {
        peoples.Add(new People() { name = "小明", age = 21 });
        peoples.Add(new People() { name = "小李", age = 24 });
        peoples.Add(new People() { name = "小玉", age = 22 });
        peoples.Add(new People() { name = "小紅", age = 18 });
        peoples.Add(new People() { name = "小王", age = 17 });

        peoples.Sort(delegate (People p1, People p2)
        {
            return p1.age.CompareTo(p2.age);
        });

        foreach (var people in peoples)
        {
            print(people.name + people.age);
        }
    }

}


當然了,這樣也可以用Lambda表示式來排序。顯得更加的簡潔。

 peoples.Sort((People p1, People p2) => p1.age.CompareTo(p2.age));

好了,這就是list中sort()方法的過載排序方法啦!今天就寫到這裡吧!