[英]Which class type should I use for sorted collection with key updating and value lookup
我正在用C#代码在Unity中制作游戏,并且我希望角色具有类似Aggro Table之类的东西。
它将是类似(float,int)的表 ,其中int是其他字符ID, float是实际的农业价值。
基本上,我没有几件事:
我对C#的经验不是很丰富,很少看到诸如sortedlist / dictionary之类的东西,但是它似乎并没有针对我想要的所有东西进行优化。
您有什么建议吗?
编辑:不确定我是否在解释我要实现的目标方面做得很好。 它可能非常类似于足球运动员的名字和赛季中进球数的表格。 我会经常要求“最有生产力的球员”,而且我会经常通过查找他们的名字并更改其统计信息来更新他们的得分,这需要始终对表格进行排序。
您可以使用List<Character>
或不包含玩家角色的数组。 您可以使List<Character>
始终以最高的农业价值排在最前面。 为了使所有帧都排序,首先要运行quicksort 。 一旦Character
异能值低于玩家的异能阈值,您就可以退出该方法。
如果aggro高于阈值,则运行aggro检查。
您可以通过拥有List<Player>
将其扩展为适用于多人游戏。 就像是:
void quicksort(List<Enemy> enemies, int first, int last)
{
int left = first;
int right = last;
int pivot = first;
first++;
while (last >= first)
{
if(enemies[first].Aggro >= enemies[pivot].Aggro &&
enemies[last].Aggro < enemies[pivot].Aggro)
swapp(enemies, first, last)
else if(enemies[first].Aggro >= enemies[pivot].Aggro)
last--;
else if(enemies[last].Aggro < colliders[pivot].Aggro)
first++;
else
{
last--;
first++;
}
}
swap(enemies, pivot, last);
pivot = last;
if(pivot > left)
quicksort(enemies, left, pivot);
if(right > pivot + 1)
quicksort(enemies, pivot + 1, right);
}
void swap(List<Enemy> enemies, int left, right)
{
var temp = enemies[right];
enemies[right] = enemies[left];
enemies[left] = temp;
}
void CheckAggro()
{
quicksort(enemies, 0, enemies.Count - 1);
for(int = 0; i < players.Count; i++)
{
for(int j = 0 < enemies.Count; j++)
{
if(players[i].AggroThreshhold < enemies[j].Aggro)
{
break;
}
// Perform what happens when enemy is high on aggro threshold.
}
}
}
如果玩家具有不同的aggro阈值,则可以将所有aggro大于最小值的敌人保存到单独的List
,然后从最低阈值到最高阈值的玩家进行检查。 只需让玩家列表中排在前列的最低Aggro门槛就可以。
我认为最好的解决方案在SortedList
。 从我可以收集到的信息来看: SortedList <TKey, TValue>
在排序日期时具有更快的插入和删除操作。
我认为有一个问题会有所帮助: 什么时候在SortedDictionary <TKey,TValue>上使用SortedList <TKey,TValue>?
希望我能帮上忙。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.