比Switch case 更高效的方法:字典(Dictionary) + 委託(delegate)
阿新 • • 發佈:2018-12-26
Hello,我是KitStar
以下文章整理的不對。還請見諒
以下程式碼書寫於Unity3D中。
眾所周知,在C#中。一條switch語句允許測試一個變數在等於多個值的時的情況。每一個值作為一個case,去判斷,當條件達成則執行。 並且,被測試的變數會對每一個case進行檢查,直至找到符合條件的。
由於它是以遍歷的方式一個個對比。當資料小的時候影響不大。但當資料達到一定程度的時候就會影響運算速度,特別是在網路端實時獲取資料的時候。
所以,將採取一下的方式去優化代替 Switch case語句。
字典(Dictionary) + 委託(delegate)
首先大家都知道字典(Dictionary)有著以健(Key):值(Value)成對的儲存形式的資料型別。並且健必須是唯一的,而值可以是相同存在的。並且健和值的可以是任意型別存在的。
通常在訪問的時候,可以採用,訪問字典的健來獲取它對應的值。
那麼它的值是一個方法呢?我們是不是隻要在獲取的時候輸入相應的健,就可以使用對應的方式。而不需要,一一去遍歷去對比。那麼同時也用到了委託。
邏輯就是這樣,具體的實現過程不多說了。文采有限,唉,麼文化,不知道怎麼組織語言。所有,剩下的大家就看程式碼吧挺簡單的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class lambdaTest : MonoBehaviour {
//定義委託類
delegate float Operator(float number1,float number2);
//定義字典
Dictionary<char,Operator> dict = new Dictionary<char, Operator>();
void Start ()
{
//初始一個型別為Operator的加方法
Operator Jia = (x, y ) =>
{
return x + y;
};
//還可以給Jia方法附加繫結其他方法
Jia += jia;
Operator jian = (x, y ) =>
{
return x - y;
};
Operator cheng = (x, y ) =>
{
return x * y;
};
Operator chu = (x, y ) =>
{
return x / y;
};
dict.Add('+',Jia);
dict.Add ('-',jian);
dict.Add ('*', cheng);
dict.Add('/',chu);
//這塊就是呼叫時候了。直接通過字典中的‘+’健,訪問到它對應的值。也就是Jia方法。
Debug.Log (dict['+'](3,5));
}
float jia(float a,float b)
{
Debug.Log ("a :" + a + "b :" + b);
return a+b;
}
}