概述:
IComparable 表示类能够去比较。
IComparer 是比较器,能够去比较两个实例的大小。
鸡蛋和鸡蛋间本身无法比较哪个重,电子称可以分辨两个鸡蛋(或其他物体)谁更重,所以 电子称可以看作是IComparer
人可以通过掰手腕,比出那个人力气大,所以人可以看作是IComparable 可以相互间比较的。
比较器实例:
using System; using UnityEngine; using System.Collections.Generic; public class UnrealDistanceComparer:Comparer<GameObject> { private Vector3 _zeroPoint = Vector3.zero; //首先保存距离,若存在则取,否则重新计算 private Dictionary<GameObject,float> dic_GoToZeroDistance = new Dictionary<GameObject, float> (); public UnrealDistanceComparer (Vector3 zeroPoint) { this._zeroPoint = zeroPoint; } public override int Compare (GameObject go1, GameObject go2) { if (go1 == null && go2 == null) { return 0; } if (go1 == null) { return -1; } if (go2 == null) { return 1; } float distance1; float distance2; if (dic_GoToZeroDistance.ContainsKey (go1)) { distance1 = dic_GoToZeroDistance [go1]; } else { distance1 = Vector3.Distance (go1.transform.position, _zeroPoint); } if (dic_GoToZeroDistance.ContainsKey (go2)) { distance2 = dic_GoToZeroDistance [go2]; } else { distance2 = Vector3.Distance (go2.transform.position, _zeroPoint); } if (distance1 < distance2) { return -1; } if (distance1 > distance2) { return 1; } return 0; } }
使用方法:allEnemies是一个list类型
allEnemies.Sort (new UnrealDistanceComparer (transform.position));