rust iter3ok.

#[derive(Debug)]
enum Unit{
    INT(i32),
    STR(String),
    FLOAT(f32)
}
#[derive(Debug)]
struct People{
    name: String,
    elements: Vec<Unit>
}

impl IntoIterator for People {
    type Item = Unit;
    type IntoIter = std::vec::IntoIter<Unit>;
    fn into_iter(self) -> Self::IntoIter {
        self.elements.into_iter()
    }
}

struct Family{
    name:String,
    peoples: Vec<People>
}

impl IntoIterator for Family {
    type Item = Vec<Unit>;
    type IntoIter = std::vec::IntoIter<Vec<Unit>>;
    fn into_iter(self) -> Self::IntoIter {
        
        let mut tmp_out:Vec<Vec<Unit>> = vec![];
        // self.peoples.into_iter()
        for each in self.peoples{
            let mut tmp_inner :Vec<Unit>= vec![];
            for i in each.elements{
                tmp_inner.push(i);
            }
            tmp_out.push(tmp_inner);
        }
        tmp_out.into_iter()
    }
}

fn main(){
    let a1 = Unit::INT(1_i32);
    let a2 = Unit::FLOAT(2.2_f32);
    let a3 = Unit::STR("abc".to_string());
    let peo1 = People{
        name: "Tina".to_string(),
        elements: vec![a1, a2]
    };
    let peo2 = People{
        name: "Bob".to_string(),
        elements: vec![a3]
    };
    let f = Family{
        name: "Ahome".to_string(),
        peoples: vec![peo1, peo2]
    };

    for each in f{
        println!("{:?}", each);
    }
//let x:Vec<Unit> = f.into_iter().flatten().collect();
  //  println!("{:?}", x);

}

  

posted @ 2022-07-28 13:36  CrossPython  阅读(16)  评论(0编辑  收藏  举报