如何按属性从列表中获取项,然后使用它的其他属性

本文关键字:属性 然后 其他 何按 列表 获取 | 更新日期: 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
}

所以,正如代码几乎所表明的那样,我想知道如何

  1. 从列表中找到一个特定的节点,特别是属性为"数字"为i的节点(例如,按照其"数字"属性的顺序遍历所有这些节点(。
  2. 检查其其他属性

试过:

nodes.Find(Node => Node.number == i);
Node test = nodes[i];
place = test.position

由于其保护级别,他们显然无法访问node.number/node.position。

第二个也存在必须首先对节点进行排序的问题。

也看了这个问题

但是 [] 解决方案在"尝试过"类别学中,因为每个解决方案似乎不适用于自定义类。

我是编码新手(比如 60 小时(,所以不要

  1. 用一种非常艰难的方式解释。
  2. 说我愚蠢,因为不知道这个基本的东西。

谢谢!

如何按属性从列表中获取项,然后使用它的其他属性

我会为 NumberPosition 添加属性,使它们可供外部用户使用(目前他们的访问修饰符是 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。它将按照您想要的顺序返回一个充满节点的列表。另外:随着更多节点添加到排序节点列表中,搜索速度更快。

确保所有节点都有不同的编号!否则它会陷入无限循环!

相关文章: