2017-12-13 33 views
-5

나는 녹에 올바르게처럼 배열 데이터 구조에 포함 된 모든 결과를 반복하는 방법을 알고 싶습니다 :이 구조에 삽입 된 기록 깊이의 여러 수준이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: []} 
      ]} 
     ]} 
    ]} 
]}; 
+1

자신 만의 문제를 해결하기위한 시도가 표시되지 않았습니다. 스택 오버플로는 사람들이 코드를 작성하는 서비스가 아닙니다. 당신은 약간의 연구 나 노력을 보여줄 것으로 기대됩니다. – Shepmaster

+0

하지만 녹에 대해 많이 알지 못합니다. 그래서 내가 도움을 청하는거야. 반복 할 때 알아야 할 기본 방법은 .iter()를 사용하는 것이지만 구조의 수준을 높이 지 않습니다. 재귀 적 기능을 수행해야하지만, 유형 처리는 현재 저에게 복잡합니다. – galvares

+0

그리고 나 자신을위한 코드를 만들지 않았다. 방금 멀티 레벨을 통해 반복하는 가장 좋은 방법은 무엇이 될지 물었습니다. 사람은 "이 시스템 콜 X를 사용하거나 Y 방향으로 구조를 사용하거나 Z 또는 W를 사용하여 재귀 적으로 수행"과 같은 것으로 만 응답 할 수 있습니다. 또는 인터넷에서 일부 문서 또는 예제를 가리 키기 만하면됩니다. – galvares

답변

1

나는이 문제를 처리하는 간단한 재귀 함수를 만들었습니다. 나는 어제이 주제를 만들 때 내 실수 였는지 모르겠다. 실제 문제는 내가 요청한 것과 조금 다르지만 그 본질은 동일합니다.

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); 
} 
+0

https://play.integer32.com/?gist=66b3322720a8fa4a04496237eeccf8bc&version=stable – Shepmaster

+0

놀라운! 이것은 내가 '정확한'이라고 부르는 것이다. :) 노력에 감사드립니다. 이제 제 임무는 한 장씩 이해하는 것입니다. – galvares