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);
}
浙公网安备 33010602011771号