我正在制作Unity游戏(C#2.0),这是我第一次做任何需要最佳性能的事情。当任务结束时,根据任务对象持有的时间因素给予玩家一定数量的资源。总共有4个资源,所以我使用4个16长的switch-on-int(时间* 1000),每个资源一个交换机。
static int resource1reward(double time)
{
int time2 = time*1000;
switch (time2)
{
}
}
看一些帖子,我决定尝试使用4个字典。
Dictionary<double, int> resource1dic = new Dictionary<double, int>(16);
static int resource1dicreward(double time)
{
return resource1[time];
}
使用秒表,我看到调用(1)4方法之间的巨大差异; (2)查找4个词典的一种方法。
问题是我仍然有一个很长的静态方法来初始化4个字典。它们都具有相同的键(时间切换)但值不同。有没有更好/更清洁的方法来做到这一点?
答案 0 :(得分:0)
您的业务逻辑有点不清楚,但就Dictionary对象初始化/性能问题而言,下面的解决方案可以作为有效的替代方案。与您的用例相关,您可以声明Dictionary<double, int>
,如以下示例C#代码段所示:
public static Dictionary<double, int> SampleDictionary =new Dictionary<double, int>
{
{ 3.1, 3},
{ 3.14, 3},
{ 3.1415, 3},
{ 2.72, 2},
{ 2.728, 2}
};
这将非常快速而且相当简单。希望这可能有所帮助。
答案 1 :(得分:0)
这样的设置怎么样:
Dictionary<Resource, Dictionary<double, int>> rewards = new Dictionary<Resource, Dictionary<double, int>>();
public class Mission
{
public Resource ResourceToAward { get; set; }
public double Time { get; set; }
}
public enum Resource
{
ResourceOne,
ResourceTwo,
ResourceThree,
ResourceFour
}
从一些简单的测试中,我发现实际的int
值一直在 0.9 毫秒内被访问。
Mission theMission = new Mission()
{
ResourceToAward = Resource.ResourceFour,
Time = 15
};
Resource resource = theMission.ResourceToAward;
double time = theMission.Time;
int resourceAmountAwarded = rewards[resource][time];
只是一个建议,我会在开始执行任务之前创建Dictionary<Resource, Dictionary<double, int>>
对象,这样任务时间就不会增加任何不必要的时间。