public List<T> FindAll(Predicate<T> match);
public void Sort(Comparison<T> comparison);
Predicate和Comparison是两个泛型委托。
在C#中还有其他的泛型委托如Action,Func,等
FindAll方法中可以在()参数中设置自己的过滤方法
先讲Sort方法
public class BaseUnit {
public int id;
public int hp;
public int force;
public BaseUnit(int id,int hp,int force)
{
this.id = id;
this.hp = hp;
this.force = force;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace Core{
public class DelegateGG : MonoBehaviour {
void Start () {
List<BaseUnit> targets = new List<BaseUnit>();
targets.Add(new BaseUnit(1, 12, 13));
targets.Add(new BaseUnit(2, 13, 14));
targets.Add(new BaseUnit(3, 14, 14));
this.RankUnit(targets, delegate (BaseUnit a, BaseUnit b) { return a.id.CompareTo(b.id); }, "根据id");
}
void Update () {
}
void RankUnit(List<BaseUnit> blist, Comparison<BaseUnit> compareDelegate, string biaoyu)
{
blist.Sort(compareDelegate);
BaseUnit[] baseUnit = blist.ToArray();
Debug.Log(biaoyu);
foreach (var item in baseUnit)
{
Debug.Log(item.id);
}
}
}
}
关键就是使用Comparison来设置一个比较的委托,这样设置的话,最终输出的结果是按照id从小到大排序。
FindAll方法
public class DelegateGG : MonoBehaviour {
void Start () {
List<BaseUnit> targets = new List<BaseUnit>();
targets.Add(new BaseUnit(1, 56, 13));
targets.Add(new BaseUnit(2, 50, 14));
targets.Add(new BaseUnit(3, 40, 14));
List<BaseUnit> bsNew= targets.FindAll(delegate(BaseUnit bas){ return bas.hp <= 50; });
foreach (var item in bsNew)
{
Debug.Log(item.hp);
}
}
void Update()
{
}
void RankUnit(List<BaseUnit> blist, Comparison<BaseUnit> compareDelegate, string biaoyu)
{
blist.Sort(compareDelegate);
BaseUnit[] baseUnit = blist.ToArray();
Debug.Log(biaoyu);
foreach (var item in baseUnit)
{
Debug.Log(item.id);
}
}
}
}