c# - 大量情况下的 Switch case 性能

标签 c# function

<分区>

我正在用 C# 制作一个多层次的游戏,我正在尝试制作一个 CreateLevel(int i) 函数。这是现在的样子:

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

    case 300: ...
    }
}

所以这个函数在CreatingLevel(n);时是O(n)的,因为它必须遍历所有n个级别才能找到Level n。有没有办法使这个 O(1) ?我确信必须有比这更好的方法,但我想不出。

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

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

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

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

最佳答案

您可以使用 Dictionary<int, Action>

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

然后你可以用它来代替case语句

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

关于c# - 大量情况下的 Switch case 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650505/

相关文章:

function - 带整数参数的分段 numpy 函数

c - rand() 如何生成随机数,即使您不使用 time(NULL) 为它播种?

c - dev-c++ 上的异常标识符或 '(' 之前的 'for'

c# - Nuget DLL hell : Could not load file or assembly System. 运行时

更新json的数据库函数

C# I/O 与 C I/O

c# - C# 中的可读性和元组

php - 当我的页面加载时,它显示上一个 mysql 查询结果而不是当前的结果

无法识别 C# 属性

c# - 如何将枚举对象绑定(bind)到按钮的背景?