如何優化switch語句

2021-08-26 02:01:16 字數 1693 閱讀 4670

如何優化switch語句

程式設計的過程中難免會使用到switch語句,case如果少的情況下,效率和效能還可以,如果出項比較多的case的情況下,

還使用swtich,將會大大影響程式的效能。如何優化這樣比較大的switch語句呢?有三種方法:

第一種方法就是根據頻率來排列case的位置,對於頻率較高的case放到前面,而不是按照

case的值得有序排列,例如:

switch (type)

假設18,和19地使用頻率最高,則修改為

switch (type)

這種方法只使用於一些case語句不多的情況,如果case語句很多,最好還是採用後面兩種方法。

第二種方法就是使用巢狀的switch,將原來的線性判斷,修改二級樹的形式判斷,例子如下

switch (type)

修改為:

if (1< type && type <50)

; // this may be encapsulated as a function.

} else if (51< m_pdutype && m_pdutype <99)

; // this may be encapsulated as a function.

} else if ()

這樣就可以減少判斷地次數, 從而提高效率, 並且在每乙個switch中需要將頻率使用比較高的case放到前面。

第三種方法,如果case的值是有序遞增或者有一定規律的,就可以使用函式陣列:

例如:可以抽象出所有的case處理函式需要的引數,這裡簡單的以乙個整形引數為例,建設函式

可以抽象為:

int handlecase1(void);

int handlecase2(void);

int handlecase3(void);

int handlecase4(void);

typedef void (*handlecasefunc)(void) ;

handlecasefunc g_apfuncarray[200]

=;

根據這種方法,可以把一下的switch語句:

switch (type)

可以修改為:

g_apfuncarray[(type)-1](type);

是不是很簡單呢?

不過這種方法也有乙個缺點,就是初始化陣列要細心, 如果函式的位置搞錯了,可就麻煩了。

當然,如果type的值很分散,沒有規律可以找,例如:1,5,13,29, 57...就不太適合使用

函式陣列。實在想使用的話就只有修改設計了,將type的值修改的有規例。

我在優化switch的過程中遇到過type的值是有兩段的,第一段是1~109, 第二段是10001~10031,

我就編寫了乙個巨集實現從type值到函式陣列索引得轉換

#define get_ype_index(type) (type) < 10000 ? (type): (type)-9850;

之所以減9850是預留109~150以防備將來擴充套件使用。

當然如果是2,4,6,8這樣的可以通過type/2來獲得等等。

switch語句的優化

switch語句的優化 flyfish 通常的形式 void test int t 一 當 段比較多時候 就會提取函式 void test int t void function1 void function2 二 當類中有型別時可以使用設計模式優化 例如class employee 優化為 cla...

語句 switch語句

switch語句的特點如下 1 switch x 被選擇的內容 即x 只能是byte,short,int,char這四種型別 2 備選答案並沒有指定的順序,但是執行肯定是從第乙個case開始的,如果其中有匹配的case,執行完,通過該case的break就結束了switch。如果沒有匹配的case,...

python之switch語句,優化多個if語句

python中並沒有多分支的語句。像c語言中有switch語句,可以避免多個if的使用場合,簡化 python若想實現多分支的功能需要自己構建 涉及到裝飾器的知識點。下面舉個例子。switch dicts defdeco data def if data not inswitch dicts.key...