2012-03-13 193 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