class Node
{
int number;
Vector2 position;
public Node(int number, Vector2 position)
{
this.number = number;
this.position = position;
}
}
List<Node>nodes = new List<Node>();
for (int i = 0; i < nodes.Count; i++) //basically a foreach
{
// Here i would like to find each node from the list, in the order of their numbers,
// and check their vectors
}
所以,正如代码几乎所说,我想知道我怎么能
尝试过:
nodes.Find(Node => Node.number == i);
Node test = nodes[i];
place = test.position
由于其保护级别,他们显然无法访问node.number / node.position。
另外,第二个问题是必须首先对节点进行排序。
但是[]解决方案在“尝试过”的主题中,foreach解决方案似乎不适用于自定义类。
我是编码新手(比如60小时),所以不要
谢谢!
答案 0 :(得分:2)
我会为Number
和Position
添加properties,将其提供给外部用户(目前他们的access modifier为private
):
class Node
{
public Node(int number, Vector2 position)
{
this.Number = number;
this.Position = position;
}
public int Number { get; private set; }
public Vector2 Position { get; private set; }
}
现在您的原始尝试应该有效:
nodes.Find(node => node.Number == i);
然而,这听起来像是对List<Node>
进行排序,然后通过索引进行访问会更快。您将对列表进行一次排序并直接索引列表,并在每次迭代时查看所需项目的列表。
答案 1 :(得分:0)
List<Node> SortNodes(List<Node> nodes)
{
List<Node> sortedNodes = new List<Node>();
int length = nodes.Count; // The length gets less and less every time, but we still need all the numbers!
int a = 0; // The current number we are looking for
while (a < length)
{
for (int i = 0; i < nodes.Count; i++)
{
// if the node's number is the number we are looking for,
if (nodes[i].number == a)
{
sortedNodes.Add(list[i]); // add it to the list
nodes.RemoveAt(i); // and remove it so we don't have to search it again.
a++; // go to the next number
break; // break the loop
}
}
}
return sortedNodes;
}
这是一个简单的排序功能。您需要先设置number
属性public
。
它将按您想要的顺序返回一个完整的节点列表。
另外:随着更多节点被添加到已排序的节点列表,搜索会更快。
确保所有节点都有不同的编号!否则会陷入无限循环!