C#中List.sort中的委托方法

当需要对一个List数组中的成员进行排序时,可以用List.Sort()方法。但如果需要对List数组中成员进行统一处理后再排序时,使用foreach对数组进行修改并输出新数组未免过于麻烦。

如游戏中有多名敌人,我们使用Unity中的GetComponentsWithTag方法,将当前地图中的敌人存储到数组中。

	public List EnemyTransform;

	void Start(){
		EnemyTransform=GameObject.GetComponentsWithTag("Enemy").transform;
		//将所有“Enemy”标签的物体的transform属性添加到EnemyTransform中
	}

然后我们需要将敌人与玩家的距离进行计算排序,方便玩家切换目标。

	public void EnemyTransformSort(){
		EnemyTransform.Sort(delegate(Transform T1,Transform T2)){
			Return (Vector3.Distance(T1.position,Player.transform.positon).Compareto(Vector3.Distance(T2.position,Player.transform.positon)));
		}
	}

也可以使用lambda表达式进行简写

	public void EnemyTransformSort(){
		EnemyTransform.Sort((Transform T1,Transform T2)=>
		Vector3.Distance(T1.position,Player.transform.positon).Compareto(Vector3.Distance(T2.position,Player.transform.positon)));	
	}

这种方法其实是使用了Comparison委托

	 public void Sort(Comparison comparison);

该委托将对传入参数进行对比,如T1T2则返回1,相等返回0

.

你可能感兴趣的:(C#中List.sort中的委托方法)