迭代的最有效类型的数组

时间:2016-08-29 11:37:04

标签: c# arrays

我有一个"字符"并且角色有一个数组(或列表,或全部)"效果"适用于他们。每个"效果"是一个更改某些参数的结构。在这种情况下使用的最有效的数组类型是什么,如果必须经常使用它,那么迭代它们的最佳方法是什么。

编辑: 它就像这样

public class hero { int level; public int moveSpeed; Dictionary<effect> = effects;

int GetSpeed (){
    int m = movespeed;
    foreach (effect in effects) {
        if (type = "movement")
            m += effect.value;
    }
    return m;
    }
}

public struct effect {string type; int value;}

public static void Main (string args) {
    hero Baragorn = new hero();
    Baragorn.speed = 10;

    effect swamp = new effect();
    swamp.type = "movement";
    swamp.value = -3;

    Baragorn.effects.add(swamp)

    printf(Baragorn.GetSpeed().ToString());
}

2 个答案:

答案 0 :(得分:1)

对于使用for或foreach的性能迭代和数组的差异,请参阅:http://www.dotnetperls.com/for-foreach

或检查:Performance of Arrays vs. Lists

答案将数组和列表与for和foreach进行比较。

答案 1 :(得分:0)

无论如何必须迭代时使用Dictionary是没有意义的。当您知道要访问的密钥时,Dictionary速度很快。它们优于List<Effect>Effect[]

如果您经常添加/删除效果,

List<Effect>会更好。您无法轻松地从阵列中添加/删除,但您可以使用List

执行此操作 如果效果列表不变或不经常更改,

Effect[]会更好。添加/删除数组是很昂贵的,因为需要复制整个数组,但如果不经常这样做,Effect[]将是正确的数据结构。

性能指标显示使用for迭代列表/数组比使用foreach更快。