1. 程式人生 > >C#中List.sort中的委託方法

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

當需要對一個List陣列中的成員進行排序時,可以用List.Sort()方法。但如果需要對List陣列中成員進行統一處理後再排序時,使用foreach對陣列進行修改並輸出新陣列未免過於麻煩。

如遊戲中有多名敵人,我們使用Unity中的GetComponentsWithTag方法,將當前地圖中的敵人儲存到陣列中。

	public List<Transform> EnemyTransform;

	void Start(){
		EnemyTransform=GameObject.GetComponentsWithTag("Enemy");
	}

然後我們需要將敵人與玩家的距離進行計算排序,方便玩家切換目標。

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

該委託將對傳入引數進行對比,如T1<T2則返回-1,T1>T2則返回1,相等返回0

.