IComparable IComparer 比较器实例与使用

概述:

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));

 

使用前

 

使用后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值