自定义类实现IComparable接口时,需要实现CompareTo方法,此方法返回一个int值。

默认情况下,CompareTo是基于升序,与此对应的sort也是升序,即当前值大于传入值,返回正;小于返回负;如果想要通过sort实现逆序,那么修改CompareTo的返回值即可,即当前值大于传入值,返回负。

正序代码示例:

自定义类

using UnityEngine;
using System.Collections;
using System; 

//这是将存储在不同集合中的类。为了使用集合的 Sort() 方法,此类需要实现 IComparable 接口。
public class BadGuy : IComparable<BadGuy>
{
    public string name;
    public int power;

    public BadGuy(string newName, int newPower)
    {
        name = newName;
        power = newPower;
    }

    //IComparable 接口需要此方法。
    public int CompareTo(BadGuy other)
    {
//如果other为空,那么返回正值
        if(other == null)
        {
            return 1;
        }

        //返回力量差异。
        return power - other.power;
    }
}

其他类

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

public class SomeClass : MonoBehaviour
{
    void Start () 
    {
        //创建BadGay类型的列表
        List<BadGuy> badguys = new List<BadGuy>();

        //将 3 个 BadGuy 添加到列表
        badguys.Add( new BadGuy("Harvey", 50));
        badguys.Add( new BadGuy("Magneto", 100));
        badguys.Add( new BadGuy("Pip", 5));

        //根据power升序排序
        badguys.Sort();

        foreach(BadGuy guy in badguys)
        {
            print (guy.name + " " + guy.power);
        }
    }
}

 

更多推荐