struct - 如何正确迭代 Rust 中多级深度结构的所有记录?

标签 struct iterator rust

我想知道如何在 Rust 中正确迭代包含在这样排列的数据结构中的所有结果:

struct Node {
    id: i64,
    nodes: Vec<Node>
}

在此结构中插入的记录具有多个深度级别。像这样的东西:

{id: 1, nodes: [
    {id: 2, nodes: [ 
        {id: 3, nodes: []}, 
        {id: 4, nodes: []},
        {id: 5, nodes: [
            {id: 6, nodes: []},
            {id: 7, nodes: [
                {id: 8, nodes: []},
                {id: 9, nodes: []}
            ]}
        ]}
    ]}
]};

最佳答案

我创建了一个简单的递归函数来处理这个问题,现在一切都很好。我不知道昨天我创建这个主题时犯了什么错误。真正的问题和我要求的没什么不同,但本质是一样的:

use std::vec::Vec;

struct Node {
    id: i64,
    nodes: Vec<Node>,
    focused: bool,
}

struct Controller {
    focused: i32,
}

impl Controller {
    fn get_focused(&mut self) -> i32 {
        let nodes: Node = ....; // code skipped. represented with JSON object above, but with 'focused' member

        for node in nodes.iter() {
            self.focused = self.node_iterator(node);
        }
        self.focused
    }

    fn node_iterator(&self, node: Node) -> i32 {
        let mut focused: i32 = 0;

        if node.nodes.len() > 0 {
            for n in node.nodes.iter() {
                if n.nodes.len() > 0 {
                    focused = self.node_iterator(n);
                    if focused > 0 {
                        return focused;
                    }
                } else {
                    if n.focused == true {
                        focused = n.id as i32;
                        return focused;
                    }
                }
            }
        }
        return 0;
    }
}

fn main() {
    let mut controller = Controller { focused: 0 };

    controller.get_focused();

    println!("{}", controller.focused);
}

关于struct - 如何正确迭代 Rust 中多级深度结构的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47797743/

相关文章:

matlab - Matlab 中结构内的元胞数组 - 可能吗?

c++ - 比较两个 vector<Structs> 的字符串元素

c++ - "auto changes meaning in c++11"

c++ - 如何确保迭代器模板参数与模板类的模板参数具有相同的数据类型

rust - 如何将 `quick-error` 与盒装错误类型一起使用?

rust - 如何打印函数调用时间线?

c - 如何在 C 中使用另一个结构体内部的结构体(同时使用 malloc 和 2D 数组?)

c# - Struct inside Struct,能够改变内部Struct类型

c++ - std::array begin()和data()之间的区别

testing - 如何仅将依赖项的功能用于测试?