1. 程式人生 > >比Switch case 更高效的方法:字典(Dictionary) + 委託(delegate)

比Switch case 更高效的方法:字典(Dictionary) + 委託(delegate)

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