2017-12-13 8 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

関連する問題