如何按属性从列表中获取项,然后使用它的其他属性
本文关键字:属性 然后 其他 何按 列表 获取 | 更新日期: 2023-09-27 18:18:05
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
}
所以,正如代码几乎所表明的那样,我想知道如何
- 从列表中找到一个特定的节点,特别是属性为"数字"为i的节点(例如,按照其"数字"属性的顺序遍历所有这些节点(。
- 检查其其他属性
试过:
nodes.Find(Node => Node.number == i);
Node test = nodes[i];
place = test.position
由于其保护级别,他们显然无法访问node.number/node.position。
第二个也存在必须首先对节点进行排序的问题。
也看了这个问题
但是 [] 解决方案在"尝试过"类别学中,因为每个解决方案似乎不适用于自定义类。
我是编码新手(比如 60 小时(,所以不要
- 用一种非常艰难的方式解释。
- 说我愚蠢,因为不知道这个基本的东西。
谢谢!
我会为 Number
和 Position
添加属性,使它们可供外部用户使用(目前他们的访问修饰符是 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>
进行排序然后按索引访问会更快。您将对列表进行一次排序并直接为列表编制索引,而不是在每次迭代中查看列表以查找所需的项目。
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
。它将按照您想要的顺序返回一个充满节点的列表。另外:随着更多节点添加到排序节点列表中,搜索速度更快。
确保所有节点都有不同的编号!否则它会陷入无限循环!