C#中List.sort中的委託方法
阿新 • • 發佈:2018-12-18
當需要對一個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
.