gw-rust-programming-tutorial 0.1.0

gw rust test.
Documentation
pub fn test_13_2() {
    println!("====chapter 13.2");
    iter_loop();
    iterator_demonstration();
    vec_map_to_new_iter();
}

fn iter_loop() {
    let v1 = vec![1, 2, 3];

    let v1_iter = v1.iter();

    for val in v1_iter {
        println!("Got: {}", val);
    }
}

//Iterator trait 和 next 方法,返沪i迭代器当前值并将迭代器移动到下一个位置
//所有权并返回拥有所有权的迭代器,则可以调用 into_iter 而不是 iter。类似的,如果我们希望迭代可变引用,则可以调用 iter_mut 而不是 iter。//
//[#allow(nouse)]
fn iterator_demonstration() {
    let mut v1 = vec![1, 2, 3];

    let mut v1_iter = v1.iter();

    println!("vec={:?}",v1_iter.next());
    println!("vec={:?}",v1_iter.next());
    println!("vec={:?}",v1_iter.next());
    println!("vec={:?}",v1_iter.next());

    let it1 = v1.iter_mut();
    let it1 = v1.into_iter();

    let filters = search("a","ab\nac\n");
    println!("find line={:?}",filters);
}

//调用迭代器适配器 map 来创建一个新迭代器
fn vec_map_to_new_iter()
{
    let vecs = vec![1,2,3,4];
    let it:Vec<_> = vecs.iter().map(|x|x+1).collect();

    println!("new vec={:?}",it);
}

//闭包迭代器
fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
    contents.lines()
        .filter(|line| line.contains(query))
        .collect()
}