如何通过此数据结构获取特定索引或循环?
public class Path<TNode> : IEnumerable<TNode>
{
public TNode LastStep { get; private set; }
public Path<TNode> PreviousSteps { get; private set; }
public double TotalCost { get; private set; }
private Path(TNode lastStep, Path<TNode> previousSteps, double totalCost)
{
LastStep = lastStep;
PreviousSteps = previousSteps;
TotalCost = totalCost;
}
public Path(TNode start) : this(start, null, 0) { }
public Path<TNode> AddStep(TNode step, double stepCost)
{
return new Path<TNode>(step, this, TotalCost + stepCost);
}
public IEnumerator<TNode> GetEnumerator()
{
for (Path<TNode> p = this; p != null; p = p.PreviousSteps)
yield return p.LastStep;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
它用作A *算法的图形。我想用这个数据结构做两件事:
Path<Vector2> node;
然后能够node[0]
。答案 0 :(得分:2)
你可以使用foreach循环遍历它:
foreach (Vector2 node in path)
{
...
}
不可否认,这看起来会以相反的顺序迭代 - 如果你想要反转它,你可以像这样使用LINQ:
foreach (Vector2 node in path.Reverse())
您可以这样做,因为您已实施IEnumerable<T>
。能够通过索引访问它是相当棘手的......就我所知,你将无法以一种特别有效的方式做到这一点。
同样,您可以使用LINQ伪造它 - 但这只会迭代节点,直到它到达正确的元素:
Vector2 node = path.ElementAt(2); // Or whatever