在大量案例中切换案例性能

时间:2015-02-21 19:46:50

标签: c# function

我正在使用多个级别在C#中制作游戏,并且我尝试制作CreateLevel(int i)函数。以下是它现在的样子:

void CreateLevel(int i)
{
    switch(i) {
    case 1: ...
    case 2: ...
    ...

    case 300: ...
    }
}

因此,当涉及CreatingLevel(n);时,此函数为O(n),因为它必须遍历所有n个级别才能找到级别n。有办法制作这个O(1)吗?我相信必须有比这更好的方法,但我无法想到它。

编辑:根据评论,显然switch方法实际上是 O(1),它不是O(n)。为了这个问题,我会将我的帖子保留为原始格式。

此外,每个级别都是一组在不同位置具有不同颜色的砖块,这些砖块形成图像形状(如伞或树),我将这些信息编码为字符数组,如下所示:

[ r, r, r, g, ' ', b, b] 
[ g, g, b, ' ', g, b, b] 
[ r, b, b, ' ', b, b, b] 

然后我解析这个数组来创建游戏对象,最后用当前级别的信息填充列表,以便在当前级别的持续时间内使用它。

1 个答案:

答案 0 :(得分:3)

您可以使用Dictionary<int, Action>

var d = new Dictionary<int, Action>();
d.Add(1, () => Console.WriteLine("level 1"));
d.Add(2, () => Console.WriteLine("level 2"));

然后您可以使用它而不是案例陈述

void CreateLevel(int i)
{
    d[i].Invoke();
}