![](/img/trans.png)
[英]Redundant condition check before assignment suggestion for C# in Resharper 5
[英]If condition bash alike - check and assignment
我正在实现A *算法,并且坚持使用以下伪代码:
if neighbor not in openset or tentative_g_score <= g_score[neighbor]
came_from[neighbor] := current
g_score[neighbor] := tentative_g_score
f_score[neighbor] := g_score[neighbor] + heuristic_cost_estimate(neighbor, goal)
if neighbor not in openset
add neighbor to openset
我想优化开放集检查,这样就不会在一次算法传递中检查节点是否两次开放集。
我知道在bash中有一些类似的东西:
if(( false == openedList_.ContainsNodeXY(n.X, n.Y)) &&
InOpenSet = false ){ .... }
这样,我将获得有关节点是否在开放集中的信息。
如何在C#中做到这一点?
编辑 openList_
是一个列表(我必须对它进行排序),因此它不能是HashSet
。
我认为A *需要的是一个优先级队列,该队列也支持快速Contains
。 SortedSet<T>
是此类。 据我了解,它是一棵红黑树。
警告:请勿使用BCL中的SortedList<T>
类。 它是基于可怕的O(n^2)
算法的遗留物。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.