2012-03-13 105 views
0

我有一個大的開關情況下,我也有一列整數說{} 1610616833,1610747905,1610878977,1610878977,1611010049我 要做到以下幾點開關的情況下,代碼優化

int a; 
    switch (incomingint) 
    { 
    case 1: 
    //some code 
    break; 

    case 2: 
    //some code 
    breakl 

    //now i want to check if this one is one of the list's integers or not 
    //so i did the following 
    case 1610616833: 
    a=0; 
    break; 

    case 1610747905: 
    a=1; 
    break; 

    case 1610878977: 
    a=2; 
    break; 
    } 

的問題是:

  1. 我在列表
  2. 在列表中的成員之一的情況下,代碼約16件,除了在我的設置的值幾乎相同。 注: 設置的值「a」時纔會發生的incomingint是列表成員 之一,所以不是編寫所有的代碼的,有沒有什麼辦法來優化該代碼?
+0

這是非常不清楚你正在嘗試待辦事項,似乎有兩種東西問和第二,這是否成立:'A =(incomingInt -1000)'? – mindandmedia 2012-03-13 13:37:33

回答

1

好像你可以通過在其他新聞寫作

if (incomingint > 1000) a = incomingint - 1000; 

優化這個,如果你在列表中有16個整數,你幾乎肯定不需要去優化它。這是一個微小的,快速的工作量。

+0

感謝亞歷克斯,但它的問題的一個簡單的想象,我會重新編輯的問題,問題是,數字不按順序{1610878977,1610878977,...等} – 2012-03-13 13:37:11

2

您可以創建一個字典,這將是一個列表項和值之間的映射。

var dict = new Dictionary<int,int>(); 
dict.Add(1000, 0); 
dict.Add(1001, 1); 
dict.Add(1002, 5); 
... 

及更高版本:

a = dict[incomingint]; 

如果計算從incominginta,只是在計算中使用incomingint一個直接方式。您發佈的數據看起來,你可以簡單地做:

a = incomingint - 1000; 

對於值1000以上的incomingint

+0

這其實不是,除非此開關的情況下優化但是執行很多次。 – 2012-03-13 13:40:30

+0

謝謝俄德但我不設置「一」在所有情況下,在其他情況下有不同的代碼 – 2012-03-13 13:41:07

+0

@SaraSaeed - 這是很難給你給的例子一個全面的答案。 – Oded 2012-03-13 13:44:11

3

你可以使用字典這種轉變:

Dictionary<int, int> transformation = new Dictionary<int, int> 
{ 
    { 1000, 0 }, 
    { 1001, 1 }, 

// etc 

}; 

int a = 0; // Default value 
if (transformation.TryGetValue(incomingint, out a)) 
{ 
    // a has the value. If you need to do something else, you might do it here because you know that dictionary had incomingint 
} 
+0

感謝尼古拉,但我沒有設定一個在所有情況下,其他情況下有不同的代碼:) – 2012-03-13 13:40:40

+1

你說我中了A__設置的值__except。如果你有不同的分支,你可能會添加一個類來爲複雜的事情提供指導,這些類將爲統一代碼提供如何爲每個incomingint行爲的指令。 – 2012-03-13 13:44:15